package tests;

import static org.junit.Assert.*;

import java.sql.Array;
import java.util.ArrayList;

import org.junit.Before;
import org.junit.Test;

import exceptions.AttrBestaatInAttrGroepException;
import exceptions.AttribuutBestaatException;
import exceptions.AttribuutBestaatNietException;
import exceptions.AttribuutGroepNaamBestaatInAttribuutGroepenException;
import exceptions.AttribuutLijstLeegException;
import exceptions.AttribuutNaamKomtNietVoorInPrimaireSleutelException;
import exceptions.BuitenlandseSleutelVerwijstNaarNietBestaandRecordException;
import exceptions.DatabankBestaatException;
import exceptions.DatabankBestaatNietException;
import exceptions.DatabankNaamException;
import exceptions.DatabankNietVerbondenException;
import exceptions.FilterIsLeegException;
import exceptions.GeenAttributenException;
import exceptions.GeenKolomNamenException;
import exceptions.GeenDatabankConnectie;
import exceptions.GeenPrimaireSleutelException;
import exceptions.GeenTabelException;
import exceptions.GroepNaamException;
import exceptions.LijstenNietEvenLangException;
import exceptions.NulOnbekendException;
import exceptions.PrimaireSleutelAttribuutNamenException;
import exceptions.PrimaireSleutelDuplicaatException;
import exceptions.PrimaireSleutelLijstLeegException;
import exceptions.PrimaireSleutelNaamException;
import exceptions.RecordWaardeIsLeegException;
import exceptions.RecordWaardeMagNietLeegZijn;
import exceptions.RecordWaardeNietGevondenException;
import exceptions.ReferentieBestaatException;
import exceptions.ReferentieBestaatNietException;
import exceptions.SoortIncorrectException;
import exceptions.SoortOnbekendException;
import exceptions.TabelBestaatException;
import exceptions.TabelBestaatNietException;
import exceptions.TabelNaamException;

import model.MyRDBMS;
import model.PrimaireSleutel;
import model.Tabel;
import model.Record;

public class MyRDBMSTestcases {
	private MyRDBMS rdbms = new MyRDBMS();

	@Before
	public void resetDatabank() {
		rdbms = new MyRDBMS();
	}

	//-----------------------------
	//----------CREATE DB----------
	//-----------------------------

	//Test op databank zonder naam
	@Test(expected=DatabankNaamException.class)
	public void testCreateDatabankError1() throws DatabankBestaatException, DatabankNaamException {
		rdbms.createDatabank("");
	}

	//Test op een correcte invoer
	@Test
	public void testCreateDatabankSucces1() throws DatabankBestaatException, DatabankNaamException {
		rdbms.createDatabank("Muziekdatabank");

		assertEquals(1, rdbms.getDatabanken().size());
	}

	//Test op een dubbele databank
	@Test(expected=DatabankBestaatException.class)
	public void testCreateDatabankError2() throws DatabankBestaatException, DatabankNaamException {
		testCreateDatabankSucces1();
		rdbms.createDatabank("Muziekdatabank");
	}

	//-----------------------------
	//----------CONNECT DB---------
	//-----------------------------

	//Test op een databank zonder naam
	@Test(expected=DatabankNaamException.class)
	public void testConnectDatabankError1() throws DatabankBestaatNietException, DatabankNaamException {
		rdbms.connectDatabank("");
	}

	//Test op een connectie met een database die bestaat
	@Test
	public void testConnectDatabankSucces1() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException {
		testCreateDatabankSucces1();

		rdbms.connectDatabank("Muziekdatabank");
	}

	//Test op een connectie met een databank die er niet is.
	@Test(expected=DatabankBestaatNietException.class)
	public void testConnectDatabankError2() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException {
		testCreateDatabankSucces1();

		rdbms.connectDatabank("Pannenkoek");
	}

	//-------------------------------
	//----------CREATE TABEL---------
	//-------------------------------

	//Test het aanmaken van een Tabel zonder naam deel 1
	@Test(expected=TabelNaamException.class)
	public void testCreateTabelError1() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, PrimaireSleutelDuplicaatException {	
		testConnectDatabankSucces1();

		ArrayList<ArrayList<String>> attr = new ArrayList<ArrayList<String>>();
		ArrayList<String> input = new ArrayList<String>();
		input.add("Naam");
		input.add("String");
		input.add("null");
		attr.add(input);

		ArrayList<String> primaireSleutelValues = new ArrayList<String>();
		primaireSleutelValues.add("Naam");

		rdbms.createTabel("", attr, primaireSleutelValues, "pr1");
	}

	//Test het aanmaken van een Tabel zonder naam deel 2
	@Test(expected=TabelNaamException.class)
	public void testCreateTabelError2() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, PrimaireSleutelDuplicaatException {	
		testConnectDatabankSucces1();

		ArrayList<ArrayList<String>> attr = new ArrayList<ArrayList<String>>();
		ArrayList<String> input = new ArrayList<String>();
		input.add("Naam");
		input.add("String");
		input.add("null");
		attr.add(input);

		ArrayList<String> primaireSleutelValues = new ArrayList<String>();
		primaireSleutelValues.add("Naam");

		rdbms.createTabel(null, attr, primaireSleutelValues, "pr1");
	}

	//Test het aanmaken van een Tabel zonder argumenten deel 1
	@Test(expected=AttribuutLijstLeegException.class)
	public void testCreateTabelError3() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, PrimaireSleutelDuplicaatException {	
		testConnectDatabankSucces1();

		ArrayList<ArrayList<String>> attr = new ArrayList<ArrayList<String>>();

		ArrayList<String> primaireSleutelValues = new ArrayList<String>();
		primaireSleutelValues.add("Naam");

		rdbms.createTabel("Artiest", attr, primaireSleutelValues, "pr1");
	}

	//Test het aanmaken van een Tabel zonder argumenten deel 2
	@Test(expected=AttribuutLijstLeegException.class)
	public void testCreateTabelError4() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, PrimaireSleutelDuplicaatException {	
		testConnectDatabankSucces1();

		ArrayList<ArrayList<String>> attr = new ArrayList<ArrayList<String>>();
		ArrayList<String> input = new ArrayList<String>();
		attr.add(input);

		ArrayList<String> primaireSleutelValues = new ArrayList<String>();
		primaireSleutelValues.add("Naam");

		rdbms.createTabel("Artiest", attr, primaireSleutelValues, "pr1");
	}

	//Test het aanmaken van een Tabel zonder argumenten deel 3
	@Test(expected=AttribuutLijstLeegException.class)
	public void testCreateTabelError5() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, PrimaireSleutelDuplicaatException {	
		testConnectDatabankSucces1();

		ArrayList<String> primaireSleutelValues = new ArrayList<String>();
		primaireSleutelValues.add("Naam");

		rdbms.createTabel("Artiest", null, primaireSleutelValues, "pr1");
	}

	//Test het aanmaken van een Tabel zonder PrimaireSleutel deel 1
	@Test(expected=PrimaireSleutelLijstLeegException.class)
	public void testCreateTabelError6() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, PrimaireSleutelDuplicaatException {	
		testConnectDatabankSucces1();

		ArrayList<ArrayList<String>> attr = new ArrayList<ArrayList<String>>();
		ArrayList<String> input = new ArrayList<String>();
		input.add("Naam");
		input.add("String");
		input.add("null");
		attr.add(input);

		rdbms.createTabel("Artiest", attr, null, "pr1");
	}

	//Test het aanmaken van een Tabel zonder PrimaireSleutel deel 2
	@Test(expected=PrimaireSleutelLijstLeegException.class)
	public void testCreateTabelError7() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, PrimaireSleutelDuplicaatException {	
		testConnectDatabankSucces1();

		ArrayList<ArrayList<String>> attr = new ArrayList<ArrayList<String>>();
		ArrayList<String> input = new ArrayList<String>();
		input.add("Naam");
		input.add("String");
		input.add("null");
		attr.add(input);

		ArrayList<String> primaireSleutelValues = new ArrayList<String>();

		rdbms.createTabel("Artiest", attr, primaireSleutelValues, "pr1");
	}

	//Test het aanmaken van een Tabel met een verkeerde PrimaireSleutel
	@Test(expected=AttribuutBestaatNietException.class)
	public void testCreateTabelError8() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, PrimaireSleutelDuplicaatException {	
		testConnectDatabankSucces1();

		ArrayList<ArrayList<String>> attr = new ArrayList<ArrayList<String>>();
		ArrayList<String> input = new ArrayList<String>();
		input.add("Naam");
		input.add("VARCHAR");
		input.add("NULL");
		attr.add(input);

		ArrayList<String> primaireSleutelValues = new ArrayList<String>();
		primaireSleutelValues.add("Pannenkoek");

		rdbms.createTabel("Artiest", attr, primaireSleutelValues, "pr1");
	}

	//Test het aanmaken van een Tabel zonder primairesleutelnaam deel 1
	@Test(expected=PrimaireSleutelNaamException.class)
	public void testCreateTabelError9() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, PrimaireSleutelDuplicaatException {	
		testConnectDatabankSucces1();

		ArrayList<ArrayList<String>> attr = new ArrayList<ArrayList<String>>();
		ArrayList<String> input = new ArrayList<String>();
		input.add("Naam");
		input.add("String");
		input.add("null");
		attr.add(input);

		ArrayList<String> primaireSleutelValues = new ArrayList<String>();
		primaireSleutelValues.add("Naam");

		rdbms.createTabel("Artiest", attr, primaireSleutelValues, "");
	}

	//Test het aanmaken van een Tabel zonder primairesleutelnaam deel 2
	@Test(expected=PrimaireSleutelNaamException.class)
	public void testCreateTabelError10() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, PrimaireSleutelDuplicaatException {	
		testConnectDatabankSucces1();

		ArrayList<ArrayList<String>> attr = new ArrayList<ArrayList<String>>();
		ArrayList<String> input = new ArrayList<String>();
		input.add("Naam");
		input.add("String");
		input.add("null");
		attr.add(input);

		ArrayList<String> primaireSleutelValues = new ArrayList<String>();
		primaireSleutelValues.add("Naam");

		rdbms.createTabel("Artiest", attr, primaireSleutelValues, null);
	}

	//Test het aanmaken van een Tabel zonder database connectie deel 1
	@Test(expected=GeenDatabankConnectie.class)
	public void testCreateTabelError11() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, PrimaireSleutelDuplicaatException {	
		ArrayList<ArrayList<String>> attr = new ArrayList<ArrayList<String>>();
		ArrayList<String> input = new ArrayList<String>();
		input.add("Naam");
		input.add("String");
		input.add("null");
		attr.add(input);

		ArrayList<String> primaireSleutelValues = new ArrayList<String>();
		primaireSleutelValues.add("Naam");

		rdbms.createTabel("Artiest", attr, primaireSleutelValues, "pr1");
	}

	//Test het aanmaken van een Tabel zonder database connectie deel 2
	@Test(expected=GeenDatabankConnectie.class)
	public void testCreateTabelError12() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, PrimaireSleutelDuplicaatException {	
		testConnectDatabankSucces1();
		rdbms.disconnectDatabank();
		testCreateTabelError11();
	}

	//Test om een correcte Tabel aan te maken
	@Test
	public void testCreateTabelSucces1() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, PrimaireSleutelDuplicaatException {	
		testConnectDatabankSucces1();

		ArrayList<ArrayList<String>> attr = new ArrayList<ArrayList<String>>();
		ArrayList<String> input = new ArrayList<String>();
		input.add("Naam");
		input.add("VARCHAR");
		input.add("NULL");
		attr.add(input);

		ArrayList<String> primaireSleutelValues = new ArrayList<String>();
		primaireSleutelValues.add("Naam");

		rdbms.createTabel("Artiest", attr, primaireSleutelValues, "pr1");
		assertEquals(1, rdbms.getDatabanken().get("Muziekdatabank").getTabellenSize());
	}

	//Test om een andere correcte Tabel met meer attributen en een bredere primairesleutel aan te maken
	@Test
	public void testCreateTabelSucces2() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, PrimaireSleutelDuplicaatException {	
		testConnectDatabankSucces1();

		ArrayList<ArrayList<String>> attr = new ArrayList<ArrayList<String>>();

		ArrayList<String> naamAttribuut = new ArrayList<String>();
		naamAttribuut.add("Naam");
		naamAttribuut.add("VARCHAR");
		naamAttribuut.add("NULL");
		attr.add(naamAttribuut);

		ArrayList<String> genreAttribuut = new ArrayList<String>();
		genreAttribuut.add("Genre");
		genreAttribuut.add("VARCHAR");
		genreAttribuut.add("NULL");
		attr.add(genreAttribuut);

		ArrayList<String> releaseDateAttribuut = new ArrayList<String>();
		releaseDateAttribuut.add("ReleaseDate");
		releaseDateAttribuut.add("VARCHAR");
		releaseDateAttribuut.add("NOTNULL");
		attr.add(releaseDateAttribuut);

		ArrayList<String> primaireSleutelValues = new ArrayList<String>();
		primaireSleutelValues.add("Naam");
		primaireSleutelValues.add("ReleaseDate");

		rdbms.createTabel("Album", attr, primaireSleutelValues, "pr2");

		assertEquals(1, rdbms.getDatabanken().get("Muziekdatabank").getTabellenSize());
	}

	//Test om een andere correcte Tabel met meer attributen en een bredere primairesleutel aan te maken
	@Test
	public void testCreateTabelSucces3() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, PrimaireSleutelDuplicaatException {	
		testConnectDatabankSucces1();

		ArrayList<ArrayList<String>> attr = new ArrayList<ArrayList<String>>();

		ArrayList<String> naamAttribuut = new ArrayList<String>();
		naamAttribuut.add("Naam");
		naamAttribuut.add("VARCHAR");
		naamAttribuut.add("NOTNULL");
		attr.add(naamAttribuut);

		ArrayList<String> genreAttribuut = new ArrayList<String>();
		genreAttribuut.add("Genre");
		genreAttribuut.add("VARCHAR");
		genreAttribuut.add("NULL");
		attr.add(genreAttribuut);

		ArrayList<String> releaseDateAttribuut = new ArrayList<String>();
		releaseDateAttribuut.add("ReleaseYear");
		releaseDateAttribuut.add("INT");
		releaseDateAttribuut.add("NOTNULL");
		attr.add(releaseDateAttribuut);

		ArrayList<String> primaireSleutelValues = new ArrayList<String>();
		primaireSleutelValues.add("Naam");
		primaireSleutelValues.add("ReleaseYear");

		rdbms.createTabel("Album", attr, primaireSleutelValues, "pr2");

		assertEquals(1, rdbms.getDatabanken().get("Muziekdatabank").getTabellenSize());
	}

	//Test om een andere correcte Tabel met meer attributen en een bredere primairesleutel aan te maken
	@Test
	public void testCreateTabelSucces4() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, PrimaireSleutelDuplicaatException {	
		testConnectDatabankSucces1();

		ArrayList<ArrayList<String>> attr = new ArrayList<ArrayList<String>>();

		ArrayList<String> naamAttribuut = new ArrayList<String>();
		naamAttribuut.add("Naam");
		naamAttribuut.add("VARCHAR");
		naamAttribuut.add("NOTNULL");
		attr.add(naamAttribuut);

		ArrayList<String> genreAttribuut = new ArrayList<String>();
		genreAttribuut.add("Genre");
		genreAttribuut.add("VARCHAR");
		genreAttribuut.add("NULL");
		attr.add(genreAttribuut);

		ArrayList<String> releaseDateAttribuut = new ArrayList<String>();
		releaseDateAttribuut.add("ReleaseYear");
		releaseDateAttribuut.add("INT");
		releaseDateAttribuut.add("NOTNULL");
		attr.add(releaseDateAttribuut);

		ArrayList<String> primaireSleutelValues = new ArrayList<String>();
		primaireSleutelValues.add("Naam");
		primaireSleutelValues.add("ReleaseYear");

		rdbms.createTabel("Album", attr, primaireSleutelValues, "pr2");


		ArrayList<ArrayList<String>> attr2 = new ArrayList<ArrayList<String>>();

		ArrayList<String> naamAttribuut2 = new ArrayList<String>();
		naamAttribuut2.add("Naam");
		naamAttribuut2.add("VARCHAR");
		naamAttribuut2.add("NOTNULL");
		attr2.add(naamAttribuut2);

		ArrayList<String> genreAttribuut2 = new ArrayList<String>();
		genreAttribuut2.add("Zanger");
		genreAttribuut2.add("VARCHAR");
		genreAttribuut2.add("NOTNULL");
		attr2.add(genreAttribuut2);

		ArrayList<String> releaseDateAttribuut2 = new ArrayList<String>();
		releaseDateAttribuut2.add("Duur");
		releaseDateAttribuut2.add("INT");
		releaseDateAttribuut2.add("NOTNULL");
		attr2.add(releaseDateAttribuut2);

		ArrayList<String> primaireSleutelValues2 = new ArrayList<String>();
		primaireSleutelValues2.add("Naam");
		primaireSleutelValues2.add("Zanger");

		rdbms.createTabel("Single", attr2, primaireSleutelValues2, "pr4");

		assertEquals(2, rdbms.getDatabanken().get("Muziekdatabank").getTabellenSize());
	}

	//Test om een andere correcte Tabel met meer attributen en een bredere primairesleutel aan te maken
	@Test
	public void testCreateTabelSucces5() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, PrimaireSleutelDuplicaatException {	
		testConnectDatabankSucces1();

		ArrayList<ArrayList<String>> attr = new ArrayList<ArrayList<String>>();

		ArrayList<String> naamAttribuut = new ArrayList<String>();
		naamAttribuut.add("Artiest");
		naamAttribuut.add("VARCHAR");
		naamAttribuut.add("NOTNULL");
		attr.add(naamAttribuut);

		ArrayList<String> genreAttribuut = new ArrayList<String>();
		genreAttribuut.add("Genre");
		genreAttribuut.add("VARCHAR");
		genreAttribuut.add("NULL");
		attr.add(genreAttribuut);

		ArrayList<String> releaseDateAttribuut = new ArrayList<String>();
		releaseDateAttribuut.add("ReleaseYear");
		releaseDateAttribuut.add("INT");
		releaseDateAttribuut.add("NOTNULL");
		attr.add(releaseDateAttribuut);

		ArrayList<String> primaireSleutelValues = new ArrayList<String>();
		primaireSleutelValues.add("Artiest");

		rdbms.createTabel("Album", attr, primaireSleutelValues, "pr2");


		ArrayList<ArrayList<String>> attr2 = new ArrayList<ArrayList<String>>();

		ArrayList<String> naamAttribuut2 = new ArrayList<String>();
		naamAttribuut2.add("Naam");
		naamAttribuut2.add("VARCHAR");
		naamAttribuut2.add("NOTNULL");
		attr2.add(naamAttribuut2);

		ArrayList<String> genreAttribuut2 = new ArrayList<String>();
		genreAttribuut2.add("Artiest");
		genreAttribuut2.add("VARCHAR");
		genreAttribuut2.add("NOTNULL");
		attr2.add(genreAttribuut2);

		ArrayList<String> releaseDateAttribuut2 = new ArrayList<String>();
		releaseDateAttribuut2.add("Duur");
		releaseDateAttribuut2.add("INT");
		releaseDateAttribuut2.add("NOTNULL");
		attr2.add(releaseDateAttribuut2);

		ArrayList<String> primaireSleutelValues2 = new ArrayList<String>();
		primaireSleutelValues2.add("Naam");
		primaireSleutelValues2.add("Artiest");

		rdbms.createTabel("Single", attr2, primaireSleutelValues2, "pr4");

		assertEquals(2, rdbms.getDatabanken().get("Muziekdatabank").getTabellenSize());
	}

	//---------------------------------
	//----------TABEL GETTERS----------
	//---------------------------------

	//Test het getten van geen Tabel
	@Test(expected=TabelBestaatNietException.class)
	public void testGetTabelError1() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, PrimaireSleutelDuplicaatException {	
		testCreateTabelSucces2();
		rdbms.getDatabanken().get("Muziekdatabank").getTabel("");
	}

	//Test het getten van een Tabel die niet bestaat
	@Test(expected=TabelBestaatNietException.class)
	public void testGetTabelError2() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, PrimaireSleutelDuplicaatException {	
		testCreateTabelSucces2();
		rdbms.getDatabanken().get("Muziekdatabank").getTabel("Pannenkoek");
	}

	//Test het getten van een correcte Tabel
	@Test
	public void testGetTabelError3() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, PrimaireSleutelDuplicaatException {	
		testCreateTabelSucces2();
		assertNotNull(rdbms.getDatabanken().get("Muziekdatabank").getTabel("Album"));
	}

	//--------------------------------
	//----------DROP DATABANK---------
	//--------------------------------

	//Test het verwijderen van een Databank
	@Test
	public void testVerwijderenDatabankSucces1() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException {
		assertEquals(0, rdbms.getDatabanken().size());
		testCreateDatabankSucces1();		
		assertEquals(1, rdbms.getDatabanken().size());
		rdbms.verwijderDatabank("Muziekdatabank");
		assertEquals(0, rdbms.getDatabanken().size());
	}

	//Test het verwijderen van een Databank
	@Test(expected=DatabankBestaatNietException.class)
	public void testVerwijderenDatabankError1() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException {
		assertEquals(0, rdbms.getDatabanken().size());
		rdbms.verwijderDatabank("Muziekdatabank");
	}

	//-----------------------------
	//----------TOEVOEGEN----------
	//-----------------------------

	//Test het toevoegen van een correct Record
	@Test
	public void testToevoegenSucces1() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, LijstenNietEvenLangException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
		testCreateTabelSucces3();	
		rdbms.toevoegen("Album", new String[]{"Naam", "Genre", "ReleaseYear"}, new String[]{"Paul", "Happy Hardcore", "2012"});
	}

	//Test het toevoegen van een correct Record met een lege entry die leeg mag zijn
	@Test
	public void testToevoegenSucces2() throws GeenDatabankConnectie, LijstenNietEvenLangException, TabelBestaatNietException, AttribuutBestaatNietException, SoortOnbekendException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttrBestaatInAttrGroepException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, NulOnbekendException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
		testCreateTabelSucces3();	
		rdbms.toevoegen("Album", new String[]{"Naam", "Genre", "ReleaseYear"}, new String[]{"Paul", "NULL", "2012"});
	}

	//Test het toevoegen van een correct Record met niet alleen de verplichte velden
	@Test
	public void testToevoegenSucces3() throws GeenDatabankConnectie, LijstenNietEvenLangException, TabelBestaatNietException, AttribuutBestaatNietException, SoortOnbekendException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttrBestaatInAttrGroepException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, NulOnbekendException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
		testCreateTabelSucces3();	
		rdbms.toevoegen("Album", new String[]{"Naam", "ReleaseYear"}, new String[]{"Paul", "2012"});
	}

	//Test het toevoegen van twee correcte Records waarbij 1 van de primairesleutels verschilt
	@Test
	public void testToevoegenSucces4() throws GeenDatabankConnectie, LijstenNietEvenLangException, TabelBestaatNietException, AttribuutBestaatNietException, SoortOnbekendException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttrBestaatInAttrGroepException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, NulOnbekendException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
		testCreateTabelSucces3();	
		rdbms.toevoegen("Album", new String[]{"Naam", "ReleaseYear"}, new String[]{"Paul", "2012"});
		rdbms.toevoegen("Album", new String[]{"Naam", "ReleaseYear"}, new String[]{"Ruud", "2012"});
	}

	//Test het toevoegen van twee correcte Records waarbij de andere primairesleutels verschilt
	@Test
	public void testToevoegenSucces5() throws GeenDatabankConnectie, LijstenNietEvenLangException, TabelBestaatNietException, AttribuutBestaatNietException, SoortOnbekendException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttrBestaatInAttrGroepException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, NulOnbekendException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
		testCreateTabelSucces3();	
		rdbms.toevoegen("Album", new String[]{"Naam", "ReleaseYear"}, new String[]{"Paul", "2012"});
		rdbms.toevoegen("Album", new String[]{"Naam", "ReleaseYear"}, new String[]{"Paul", "2013"});
	}

	//Test het toevoegen van twee correcte Records waarbij beide primairesleutels verschillen
	@Test
	public void testToevoegenSucces6() throws GeenDatabankConnectie, LijstenNietEvenLangException, TabelBestaatNietException, AttribuutBestaatNietException, SoortOnbekendException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttrBestaatInAttrGroepException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, NulOnbekendException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
		testCreateTabelSucces3();	
		rdbms.toevoegen("Album", new String[]{"Naam", "ReleaseYear"}, new String[]{"Paul", "2012"});
		rdbms.toevoegen("Album", new String[]{"Naam", "ReleaseYear"}, new String[]{"Ruud", "2013"});
	}

	//Test het toevoegen van twee correcte Records waarbij beide primairesleutels verschillen
	@Test
	public void testToevoegenSucces7() throws GeenDatabankConnectie, LijstenNietEvenLangException, TabelBestaatNietException, AttribuutBestaatNietException, SoortOnbekendException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttrBestaatInAttrGroepException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, NulOnbekendException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
		testCreateTabelSucces3();	
		rdbms.toevoegen("Album", new String[]{"Naam", "Genre", "ReleaseYear"}, new String[]{"Paul", "Happy Hardcore", "2012"});
		rdbms.toevoegen("Album", new String[]{"Naam", "Genre", "ReleaseYear"}, new String[]{"Ruud", "Happy Hardcore", "2013"});
	}

	//Test het toevoegen van veel correcte Records waarbij beide primairesleutels verschillen
	@Test
	public void testToevoegenSucces8() throws GeenDatabankConnectie, LijstenNietEvenLangException, TabelBestaatNietException, AttribuutBestaatNietException, SoortOnbekendException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttrBestaatInAttrGroepException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, NulOnbekendException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
		testCreateTabelSucces3();	
		rdbms.toevoegen("Album", new String[]{"Naam", "Genre", "ReleaseYear"}, new String[]{"Paul", "Happy Hardcore", "2012"});
		rdbms.toevoegen("Album", new String[]{"Naam", "Genre", "ReleaseYear"}, new String[]{"Ruud", "Pop", "2013"});
		rdbms.toevoegen("Album", new String[]{"Naam", "Genre", "ReleaseYear"}, new String[]{"Willem", "Klassiek", "1943"});
		rdbms.toevoegen("Album", new String[]{"Naam", "Genre", "ReleaseYear"}, new String[]{"Hermien", "Terror", "1912"});
		rdbms.toevoegen("Album", new String[]{"Naam", "Genre", "ReleaseYear"}, new String[]{"Nico", "Progressive Metal", "2012"});
		rdbms.toevoegen("Album", new String[]{"Naam", "Genre", "ReleaseYear"}, new String[]{"Dennis", "Hardstyle", "2012"});
		rdbms.toevoegen("Album", new String[]{"Naam", "Genre", "ReleaseYear"}, new String[]{"J-AGE", "Polka", "2015"});
		rdbms.toevoegen("Album", new String[]{"Naam", "Genre", "ReleaseYear"}, new String[]{"Bram", "Hardstyle", "2015"});
	}

	//Test het toevoegen van veel correcte Records van meerdere tabellen waarbij beide primairesleutels verschillen
	@Test
	public void testToevoegenSucces9() throws GeenDatabankConnectie, LijstenNietEvenLangException, TabelBestaatNietException, AttribuutBestaatNietException, SoortOnbekendException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttrBestaatInAttrGroepException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, NulOnbekendException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
		testCreateTabelSucces4();	
		rdbms.toevoegen("Album", new String[]{"Naam", "Genre", "ReleaseYear"}, new String[]{"Paul", "Happy Hardcore", "2012"});
		rdbms.toevoegen("Album", new String[]{"Naam", "Genre", "ReleaseYear"}, new String[]{"Ruud", "Pop", "2013"});
		rdbms.toevoegen("Album", new String[]{"Naam", "Genre", "ReleaseYear"}, new String[]{"Willem", "Klassiek", "1943"});
		rdbms.toevoegen("Album", new String[]{"Naam", "Genre", "ReleaseYear"}, new String[]{"Hermien", "Terror", "1912"});
		rdbms.toevoegen("Album", new String[]{"Naam", "Genre", "ReleaseYear"}, new String[]{"Nico", "Progressive Metal", "2012"});
		rdbms.toevoegen("Album", new String[]{"Naam", "Genre", "ReleaseYear"}, new String[]{"Dennis", "Hardstyle", "2012"});
		rdbms.toevoegen("Album", new String[]{"Naam", "Genre", "ReleaseYear"}, new String[]{"J-AGE", "Polka", "2015"});
		rdbms.toevoegen("Album", new String[]{"Naam", "Genre", "ReleaseYear"}, new String[]{"Bram", "Hardstyle", "2015"});

		rdbms.toevoegen("Single", new String[]{"Naam", "Zanger", "Duur"}, new String[]{"Put your hands op for DBI", "Paul", "185"});
		rdbms.toevoegen("Single", new String[]{"Naam", "Zanger", "Duur"}, new String[]{"I want your DBI, inside of me!", "Ruud", "200"});
		rdbms.toevoegen("Single", new String[]{"Naam", "Zanger", "Duur"}, new String[]{"Welcome to the Darkside!", "Hermien", "185"});
		rdbms.toevoegen("Single", new String[]{"Naam", "Zanger", "Duur"}, new String[]{"I <3 DBI", "Nico", "200"});
		rdbms.toevoegen("Single", new String[]{"Naam", "Zanger", "Duur"}, new String[]{"I <3 DBI", "Dennis", "190"});
		rdbms.toevoegen("Single", new String[]{"Naam", "Zanger", "Duur"}, new String[]{"Jihad theme song", "J-AGE", "300"});
		rdbms.toevoegen("Single", new String[]{"Naam", "Zanger", "Duur"}, new String[]{"HAKKUH!", "Bram", "230"});
	}


	//Test het toevoegen van twee correcte Records waarbij de kolommen op verschillende volgordes worden toegevoegd
	@Test
	public void testToevoegenSucces10() throws GeenDatabankConnectie, LijstenNietEvenLangException, TabelBestaatNietException, AttribuutBestaatNietException, SoortOnbekendException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttrBestaatInAttrGroepException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, NulOnbekendException, GeenKolomNamenException, RecordWaardeNietGevondenException, FilterIsLeegException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
		testCreateTabelSucces3();	
		rdbms.toevoegen("Album", new String[]{"Naam", "ReleaseYear", "Genre"}, new String[]{"Paul", "2012", "Happy Hardcore"});
		rdbms.toevoegen("Album", new String[]{"Naam", "Genre", "ReleaseYear"}, new String[]{"Ruud", "Happy Hardcore", "2013"});
		ArrayList<String> kolomNamen = new ArrayList<String>();
		kolomNamen.add("*");
		assertEquals("ReleaseYear | Genre | Naam | \n2012 | Happy Hardcore | Paul | \n2013 | Happy Hardcore | Ruud | \n", rdbms.selecteren(kolomNamen, "Album", null, null));
	}

	//Test het toevoegen van veel correcte Records van meerdere tabellen waarbij beide primairesleutels verschillen
	@Test
	public void testToevoegenSucces11() throws GeenDatabankConnectie, LijstenNietEvenLangException, TabelBestaatNietException, AttribuutBestaatNietException, SoortOnbekendException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttrBestaatInAttrGroepException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, NulOnbekendException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
		testCreateTabelSucces5();	
		rdbms.toevoegen("Album", new String[]{"Artiest", "Genre", "ReleaseYear"}, new String[]{"Paul", "Happy Hardcore", "2012"});
		rdbms.toevoegen("Album", new String[]{"Artiest", "Genre", "ReleaseYear"}, new String[]{"Ruud", "Pop", "2013"});
		rdbms.toevoegen("Album", new String[]{"Artiest", "Genre", "ReleaseYear"}, new String[]{"Willem", "Klassiek", "1943"});
		rdbms.toevoegen("Album", new String[]{"Artiest", "Genre", "ReleaseYear"}, new String[]{"Hermien", "Terror", "1912"});
		rdbms.toevoegen("Album", new String[]{"Artiest", "Genre", "ReleaseYear"}, new String[]{"Nico", "Progressive Metal", "2012"});
		rdbms.toevoegen("Album", new String[]{"Artiest", "Genre", "ReleaseYear"}, new String[]{"Dennis", "Hardstyle", "2012"});
		rdbms.toevoegen("Album", new String[]{"Artiest", "Genre", "ReleaseYear"}, new String[]{"J-AGE", "Polka", "2015"});
		rdbms.toevoegen("Album", new String[]{"Artiest", "Genre", "ReleaseYear"}, new String[]{"Bram", "Hardstyle", "2015"});

		rdbms.toevoegen("Single", new String[]{"Naam", "Artiest", "Duur"}, new String[]{"Put your hands op for DBI", "Paul", "185"});
		rdbms.toevoegen("Single", new String[]{"Naam", "Artiest", "Duur"}, new String[]{"I want your DBI, inside of me!", "Ruud", "200"});
		rdbms.toevoegen("Single", new String[]{"Naam", "Artiest", "Duur"}, new String[]{"Welcome to the Darkside!", "Hermien", "185"});
		rdbms.toevoegen("Single", new String[]{"Naam", "Artiest", "Duur"}, new String[]{"I <3 DBI", "Nico", "200"});
		rdbms.toevoegen("Single", new String[]{"Naam", "Artiest", "Duur"}, new String[]{"I <3 DBI", "Dennis", "190"});
		rdbms.toevoegen("Single", new String[]{"Naam", "Artiest", "Duur"}, new String[]{"Jihad theme song", "J-AGE", "300"});
		rdbms.toevoegen("Single", new String[]{"Naam", "Artiest", "Duur"}, new String[]{"HAKKUH!", "Bram", "230"});
	}

	//Test het toevoegen van een incorrect Record, ongelijke lijsten
	@Test(expected=LijstenNietEvenLangException.class)
	public void testToevoegenError1() throws GeenDatabankConnectie, LijstenNietEvenLangException, TabelBestaatNietException, AttribuutBestaatNietException, SoortOnbekendException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttrBestaatInAttrGroepException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, NulOnbekendException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
		testCreateTabelSucces3();	
		rdbms.toevoegen("Album", new String[]{"Naam", "Genre", "ReleaseYear"}, new String[]{"Paul", "Happy Hardcore"});
	}

	//Test het toevoegen van een incorrect Record, tabel bestaat niet
	@Test(expected=TabelBestaatNietException.class)
	public void testToevoegenError2() throws GeenDatabankConnectie, LijstenNietEvenLangException, TabelBestaatNietException, AttribuutBestaatNietException, SoortOnbekendException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttrBestaatInAttrGroepException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, NulOnbekendException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
		testCreateTabelSucces3();	
		rdbms.toevoegen("Pannenkoek", new String[]{"Naam", "Genre", "ReleaseYear"}, new String[]{"Paul", "Happy Hardcore", "2012"});
	}

	//Test het toevoegen van een incorrect Record, attribuut bestaat niet
	@Test(expected=AttribuutBestaatNietException.class)
	public void testToevoegenError3() throws GeenDatabankConnectie, LijstenNietEvenLangException, TabelBestaatNietException, AttribuutBestaatNietException, SoortOnbekendException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttrBestaatInAttrGroepException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, NulOnbekendException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
		testCreateTabelSucces3();	
		rdbms.toevoegen("Album", new String[]{"Naam", "Pannenkoek", "ReleaseYear"}, new String[]{"Paul", "Happy Hardcore", "2012"});
	}

	//Test het toevoegen van een incorrect Record, 1 van de velden heeft een verkeerd type
	@Test(expected=SoortIncorrectException.class)
	public void testToevoegenError4() throws GeenDatabankConnectie, LijstenNietEvenLangException, TabelBestaatNietException, AttribuutBestaatNietException, SoortOnbekendException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttrBestaatInAttrGroepException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, NulOnbekendException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
		testCreateTabelSucces3();	
		rdbms.toevoegen("Album", new String[]{"Naam", "Genre", "ReleaseYear"}, new String[]{"Paul", "Happy Hardcore", "sdflkjsdflkj"});
	}

	//Test het toevoegen van een incorrect Record, veld is null
	@Test(expected=RecordWaardeIsLeegException.class)
	public void testToevoegenError5() throws GeenDatabankConnectie, LijstenNietEvenLangException, TabelBestaatNietException, AttribuutBestaatNietException, SoortOnbekendException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttrBestaatInAttrGroepException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, NulOnbekendException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
		testCreateTabelSucces3();	
		rdbms.toevoegen("Album", new String[]{"Naam", "Genre", "ReleaseYear"}, new String[]{"Paul", null, "2012"});
	}

	//Test het toevoegen van een incorrect Record, veld is lege string
	@Test(expected=RecordWaardeIsLeegException.class)
	public void testToevoegenError6() throws GeenDatabankConnectie, LijstenNietEvenLangException, TabelBestaatNietException, AttribuutBestaatNietException, SoortOnbekendException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttrBestaatInAttrGroepException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, NulOnbekendException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
		testCreateTabelSucces3();	
		rdbms.toevoegen("Album", new String[]{"Naam", "Genre", "ReleaseYear"}, new String[]{"Paul", "", "2012"});
	}

	//Test het toevoegen van een incorrect Record, veld is leeg en mag niet leeg zijn
	@Test(expected=RecordWaardeMagNietLeegZijn.class)
	public void testToevoegenError7() throws GeenDatabankConnectie, LijstenNietEvenLangException, TabelBestaatNietException, AttribuutBestaatNietException, SoortOnbekendException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttrBestaatInAttrGroepException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, NulOnbekendException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
		testCreateTabelSucces3();	
		rdbms.toevoegen("Album", new String[]{"Naam", "Genre", "ReleaseYear"}, new String[]{"NULL", "Happy Hardcore", "2012"});
	}

	//Test het toevoegen van een incorrect Record, veld is leeg terweil het een onderdeel van de primairesleutel is
	@Test(expected=PrimaireSleutelAttribuutNamenException.class)
	public void testToevoegenError8() throws GeenDatabankConnectie, LijstenNietEvenLangException, TabelBestaatNietException, AttribuutBestaatNietException, SoortOnbekendException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttrBestaatInAttrGroepException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, NulOnbekendException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
		testCreateTabelSucces2();	
		rdbms.toevoegen("Album", new String[]{"Genre", "ReleaseDate"}, new String[]{"Happy Hardcore", "2012"});
	}

	//Test het toevoegen van een correct en een incorrect Record, primairesleutel dubplicaaten
	@Test(expected=PrimaireSleutelDuplicaatException.class)
	public void testToevoegenError9() throws GeenDatabankConnectie, LijstenNietEvenLangException, TabelBestaatNietException, AttribuutBestaatNietException, SoortOnbekendException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttrBestaatInAttrGroepException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, NulOnbekendException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
		testCreateTabelSucces3();	
		rdbms.toevoegen("Album", new String[]{"Naam", "ReleaseYear"}, new String[]{"Paul", "2012"});
		rdbms.toevoegen("Album", new String[]{"Naam", "ReleaseYear"}, new String[]{"Paul", "2012"});
	}

	//Test het toevoegen van een correct en een incorrect Record, primairesleutel dubplicaaten
	@Test(expected=PrimaireSleutelDuplicaatException.class)
	public void testToevoegenError10() throws GeenDatabankConnectie, LijstenNietEvenLangException, TabelBestaatNietException, AttribuutBestaatNietException, SoortOnbekendException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttrBestaatInAttrGroepException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, NulOnbekendException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
		testCreateTabelSucces3();	
		rdbms.toevoegen("Album", new String[]{"Naam", "ReleaseYear"}, new String[]{"Paul", "2012"});
		rdbms.toevoegen("Album", new String[]{"Naam", "ReleaseYear"}, new String[]{"Nico", "2012"});
		rdbms.toevoegen("Album", new String[]{"Naam", "ReleaseYear"}, new String[]{"Paul", "2013"});
		rdbms.toevoegen("Album", new String[]{"Naam", "ReleaseYear"}, new String[]{"Paul", "2012"});
	}

	//-----------------------------
	//----------SELECTEREN---------
	//-----------------------------

	//Test het selecteren van alle kolommen met null waardes erin
	@Test
	public void testSelecterenSucces1() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, LijstenNietEvenLangException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, GeenKolomNamenException, RecordWaardeNietGevondenException, FilterIsLeegException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
		testToevoegenSucces6();
		ArrayList<String> kolomNamen = new ArrayList<String>();
		kolomNamen.add("*");

		assertEquals("ReleaseYear | Genre | Naam | \n2012 | null | Paul | \n2013 | null | Ruud | \n", rdbms.selecteren(kolomNamen, "Album", null, null));
	}

	//Test het selecteren van alle kolommen volledig ingevuld
	@Test
	public void testSelecterenSucces2() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, LijstenNietEvenLangException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, GeenKolomNamenException, RecordWaardeNietGevondenException, FilterIsLeegException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
		testToevoegenSucces7();
		ArrayList<String> kolomNamen = new ArrayList<String>();
		kolomNamen.add("*");

		assertEquals("ReleaseYear | Genre | Naam | \n2012 | Happy Hardcore | Paul | \n2013 | Happy Hardcore | Ruud | \n", rdbms.selecteren(kolomNamen, "Album", null, null));
	}

	//Test het selecteren van een deelverzameling van de kolommen
	@Test
	public void testSelecterenSucces3() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, LijstenNietEvenLangException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, GeenKolomNamenException, RecordWaardeNietGevondenException, FilterIsLeegException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
		testToevoegenSucces7();
		ArrayList<String> kolomNamen = new ArrayList<String>();
		kolomNamen.add("ReleaseYear");
		kolomNamen.add("Naam");

		assertEquals("ReleaseYear | Naam | \n2012 | Paul | \n2013 | Ruud | \n", rdbms.selecteren(kolomNamen, "Album", null, null));
	}

	//Test het selecteren van alle kolommen in andere volgorde
	@Test
	public void testSelecterenSucces4() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, LijstenNietEvenLangException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, GeenKolomNamenException, RecordWaardeNietGevondenException, FilterIsLeegException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
		testToevoegenSucces7();
		ArrayList<String> kolomNamen = new ArrayList<String>();
		kolomNamen.add("Naam");
		kolomNamen.add("ReleaseYear");
		kolomNamen.add("Genre");

		assertEquals("Naam | ReleaseYear | Genre | \nPaul | 2012 | Happy Hardcore | \nRuud | 2013 | Happy Hardcore | \n", rdbms.selecteren(kolomNamen, "Album", null, null));
	}

	//Test het selecteren filter 
	@Test
	public void testSelecterenSucces5() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, LijstenNietEvenLangException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, GeenKolomNamenException, RecordWaardeNietGevondenException, FilterIsLeegException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
		testToevoegenSucces8();
		ArrayList<String> kolomNamen = new ArrayList<String>();
		kolomNamen.add("Naam");
		kolomNamen.add("ReleaseYear");
		kolomNamen.add("Genre");

		assertEquals("Naam | ReleaseYear | Genre | \nPaul | 2012 | Happy Hardcore | \nNico | 2012 | Progressive Metal | \nDennis | 2012 | Hardstyle | \n", rdbms.selecteren(kolomNamen, "Album", "ReleaseYear", "2012"));
	}

	//Test het selecteren filter geen resultaten
	@Test
	public void testSelecterenSucces6() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, LijstenNietEvenLangException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, GeenKolomNamenException, RecordWaardeNietGevondenException, FilterIsLeegException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
		testToevoegenSucces8();
		ArrayList<String> kolomNamen = new ArrayList<String>();
		kolomNamen.add("Naam");
		kolomNamen.add("ReleaseYear");
		kolomNamen.add("Genre");

		assertEquals("Naam | ReleaseYear | Genre | \n", rdbms.selecteren(kolomNamen, "Album", "ReleaseYear", "2025"));
	}

	//Test het selecteren van geen kolommen
	@Test(expected=GeenKolomNamenException.class)
	public void testSelecterenError1() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, LijstenNietEvenLangException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, GeenKolomNamenException, RecordWaardeNietGevondenException, FilterIsLeegException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
		testToevoegenSucces7();
		rdbms.selecteren(null, "Album", null, null);
	}

	//Test het selecteren van geen kolommen
	@Test(expected=GeenKolomNamenException.class)
	public void testSelecterenError2() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, LijstenNietEvenLangException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, GeenKolomNamenException, RecordWaardeNietGevondenException, FilterIsLeegException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
		testToevoegenSucces7();
		ArrayList<String> kolomNamen = new ArrayList<String>();
		rdbms.selecteren(kolomNamen, "Album", null, null);
	}

	//Test het selecteren op een onbestaande tabel
	@Test(expected=TabelBestaatNietException.class)
	public void testSelecterenError3() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, LijstenNietEvenLangException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, GeenKolomNamenException, RecordWaardeNietGevondenException, FilterIsLeegException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
		testToevoegenSucces7();
		ArrayList<String> kolomNamen = new ArrayList<String>();
		kolomNamen.add("*");
		rdbms.selecteren(kolomNamen, null, null, null);
	}

	//Test het selecteren op een onbestaande tabel
	@Test(expected=TabelBestaatNietException.class)
	public void testSelecterenError4() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, LijstenNietEvenLangException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, GeenKolomNamenException, RecordWaardeNietGevondenException, FilterIsLeegException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
		testToevoegenSucces7();
		ArrayList<String> kolomNamen = new ArrayList<String>();
		kolomNamen.add("*");
		rdbms.selecteren(kolomNamen, "", null, null);
	}

	//Test het selecteren op een onbestaande tabel
	@Test(expected=TabelBestaatNietException.class)
	public void testSelecterenError5() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, LijstenNietEvenLangException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, GeenKolomNamenException, RecordWaardeNietGevondenException, FilterIsLeegException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
		testToevoegenSucces7();
		ArrayList<String> kolomNamen = new ArrayList<String>();
		kolomNamen.add("*");
		rdbms.selecteren(kolomNamen, "pannenkoek", null, null);
	}

	//Test het selecteren filter geen filterValue
	@Test(expected=FilterIsLeegException.class)
	public void testSelecterenError6() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, LijstenNietEvenLangException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, GeenKolomNamenException, RecordWaardeNietGevondenException, FilterIsLeegException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
		testToevoegenSucces8();
		ArrayList<String> kolomNamen = new ArrayList<String>();
		kolomNamen.add("Naam");
		kolomNamen.add("ReleaseYear");
		kolomNamen.add("Genre");

		rdbms.selecteren(kolomNamen, "Album", "ReleaseYear", null);
	}

	//Test het selecteren filter geen filterValue
	@Test(expected=FilterIsLeegException.class)
	public void testSelecterenError7() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, LijstenNietEvenLangException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, GeenKolomNamenException, RecordWaardeNietGevondenException, FilterIsLeegException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
		testToevoegenSucces8();
		ArrayList<String> kolomNamen = new ArrayList<String>();
		kolomNamen.add("Naam");
		kolomNamen.add("ReleaseYear");
		kolomNamen.add("Genre");

		rdbms.selecteren(kolomNamen, "Album", "ReleaseYear", "");
	}

	//Test het selecteren filter onbekend filterKey
	@Test(expected=AttribuutBestaatNietException.class)
	public void testSelecterenError8() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, LijstenNietEvenLangException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, GeenKolomNamenException, RecordWaardeNietGevondenException, FilterIsLeegException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
		testToevoegenSucces8();
		ArrayList<String> kolomNamen = new ArrayList<String>();
		kolomNamen.add("Naam");
		kolomNamen.add("ReleaseYear");
		kolomNamen.add("Genre");

		rdbms.selecteren(kolomNamen, "Album", "Pannenkoek", "henk");
	}

	//-----------------------------
	//----------ToonTabellen-------
	//-----------------------------

	//Test het tonen van de tabellen.
	@Test
	public void testToonTabellenSucces1() throws GeenDatabankConnectie, LijstenNietEvenLangException, TabelBestaatNietException, AttribuutBestaatNietException, SoortOnbekendException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttrBestaatInAttrGroepException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, NulOnbekendException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
		testToevoegenSucces9();

		assertEquals("Databank: Muziekdatabank\n--------------------------------------\nTabel: Album = {ReleaseYear | Genre | Naam | }\nTabel: Single = {Zanger | Naam | Duur | }\n", rdbms.toonTabellen());
	}

	//Test het tonen van de tabellen.
	@Test
	public void testToonTabellenSucces2() throws GeenDatabankConnectie, LijstenNietEvenLangException, TabelBestaatNietException, AttribuutBestaatNietException, SoortOnbekendException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttrBestaatInAttrGroepException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, NulOnbekendException {
		testConnectDatabankSucces1();

		assertEquals("Databank: Muziekdatabank\n--------------------------------------\n", rdbms.toonTabellen());
	}


	//-------------------------------------------
	//--------ToevoegenBuitenlandseSleutel-------
	//-------------------------------------------

	//Test het correct toevoegen van een buitenlandse sleutel
	@Test
	public void testToevoegenBuitenlandseSleutelSucces1() throws GeenDatabankConnectie, LijstenNietEvenLangException, TabelBestaatNietException, AttribuutBestaatNietException, SoortOnbekendException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttrBestaatInAttrGroepException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, NulOnbekendException, ReferentieBestaatException, GroepNaamException, GeenTabelException, GeenPrimaireSleutelException, GeenAttributenException, AttribuutGroepNaamBestaatInAttribuutGroepenException, DatabankNietVerbondenException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
		testToevoegenSucces11();

		String groepNaam = "bs_singlealbum";
		Tabel vanTabel = rdbms.getConnected().getTabel("Single");
		Tabel naarTabel = rdbms.getConnected().getTabel("Album");
		String[] attributenVanaf = new String[]{"Artiest"};

		rdbms.toevoegenBuitenlandseSleutel2(groepNaam, vanTabel, naarTabel, attributenVanaf);
	}

	//Test het toevoegen van een buitenlandse sleutel bij het aanmaken van een tabel - ref check
	@Test
	public void testToevoegenBuitenlandseSleutelSucces2() throws Exception {
		testToevoegenSucces11();

		assertEquals(0, rdbms.getConnected().getTabel("Album").getReferentiesHashMapKeys().length);

		String groepNaam = "bs_singlealbum";
		Tabel vanTabel = rdbms.getConnected().getTabel("Single");
		Tabel naarTabel = rdbms.getConnected().getTabel("Album");
		String[] attributenVanaf = new String[]{"Artiest"};

		rdbms.toevoegenBuitenlandseSleutel2(groepNaam, vanTabel, naarTabel, attributenVanaf);

		assertEquals(1, rdbms.getConnected().getTabel("Single").getReferentiesHashMapKeys().length);

		ArrayList<ArrayList<String>> attributen = new ArrayList<ArrayList<String>>();

		ArrayList<String> naamAttribuut = new ArrayList<String>();
		naamAttribuut.add("LPNaam");
		naamAttribuut.add("VARCHAR");
		naamAttribuut.add("NOTNULL");
		attributen.add(naamAttribuut);

		ArrayList<String> genreAttribuut = new ArrayList<String>();
		genreAttribuut.add("Artiest");
		genreAttribuut.add("VARCHAR");
		genreAttribuut.add("NOTNULL");
		attributen.add(genreAttribuut);

		ArrayList<String> releaseDateAttribuut = new ArrayList<String>();
		releaseDateAttribuut.add("Jaar");
		releaseDateAttribuut.add("INT");
		releaseDateAttribuut.add("NOTNULL");
		attributen.add(releaseDateAttribuut);

		ArrayList<String> primaireSleutel = new ArrayList<String>();
		primaireSleutel.add("LPNaam");
		String primaireSleutelNaam = "p_lp";

		rdbms.createTabel("LP", attributen, primaireSleutel, primaireSleutelNaam);

		groepNaam = "bs_lp";
		vanTabel = rdbms.getConnected().getTabel("LP");
		naarTabel = rdbms.getConnected().getTabel("Album");
		attributenVanaf = new String[]{"Artiest"};

		rdbms.toevoegenBuitenlandseSleutel2(groepNaam, vanTabel, naarTabel, attributenVanaf);

		assertEquals(0, rdbms.getConnected().getTabel("Album").getReferentiesHashMapKeys().length);
		assertEquals(1, rdbms.getConnected().getTabel("LP").getReferentiesHashMapKeys().length);
		assertEquals(1, rdbms.getConnected().getTabel("Single").getReferentiesHashMapKeys().length);
	}

		//Test het toevoegen van een buitenlandse sleutel waarbij de naam van de buitenlandse sleutel al voor kwam
		@Test(expected=ReferentieBestaatException.class)
		public void testToevoegenBuitenlandseSleutelError1() throws GeenDatabankConnectie, LijstenNietEvenLangException, TabelBestaatNietException, AttribuutBestaatNietException, SoortOnbekendException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttrBestaatInAttrGroepException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, NulOnbekendException, ReferentieBestaatException, GroepNaamException, GeenTabelException, GeenPrimaireSleutelException, GeenAttributenException, AttribuutGroepNaamBestaatInAttribuutGroepenException, DatabankNietVerbondenException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
			testToevoegenBuitenlandseSleutelSucces1();
			
			String groepNaam = "bs_singlealbum";
			Tabel vanTabel = rdbms.getConnected().getTabel("Single");
			Tabel naarTabel = rdbms.getConnected().getTabel("Album");
			String[] attributenVanaf = new String[]{"Artiest"};
			
			rdbms.toevoegenBuitenlandseSleutel2(groepNaam, vanTabel, naarTabel, attributenVanaf);
		}
		
		//Test het toevoegen van een buitenlandse sleutel waarbij de groepsnaam null is
		@Test(expected=GroepNaamException.class)
		public void testToevoegenBuitenlandseSleutelError2() throws GeenDatabankConnectie, LijstenNietEvenLangException, TabelBestaatNietException, AttribuutBestaatNietException, SoortOnbekendException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttrBestaatInAttrGroepException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, NulOnbekendException, ReferentieBestaatException, GroepNaamException, GeenTabelException, GeenPrimaireSleutelException, GeenAttributenException, AttribuutGroepNaamBestaatInAttribuutGroepenException, DatabankNietVerbondenException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
			testToevoegenSucces11();

			String groepNaam = null;
			Tabel vanTabel = rdbms.getConnected().getTabel("Single");
			Tabel naarTabel = rdbms.getConnected().getTabel("Album");
			String[] attributenVanaf = new String[]{"Artiest"};
			
			rdbms.toevoegenBuitenlandseSleutel2(groepNaam, vanTabel, naarTabel, attributenVanaf);
		}
		
		//Test het toevoegen van een buitenlandse sleutel waarbij de vantabel null is
		@Test(expected=GeenTabelException.class)
		public void testToevoegenBuitenlandseSleutelError3() throws GeenDatabankConnectie, LijstenNietEvenLangException, TabelBestaatNietException, AttribuutBestaatNietException, SoortOnbekendException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttrBestaatInAttrGroepException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, NulOnbekendException, ReferentieBestaatException, GroepNaamException, GeenTabelException, GeenPrimaireSleutelException, GeenAttributenException, AttribuutGroepNaamBestaatInAttribuutGroepenException, DatabankNietVerbondenException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
			testToevoegenSucces11();

			String groepNaam = "bs_singlealbum";
			Tabel vanTabel = null;
			Tabel naarTabel = rdbms.getConnected().getTabel("Album");
			String[] attributenVanaf = new String[]{"Artiest"};

			rdbms.toevoegenBuitenlandseSleutel2(groepNaam, vanTabel, naarTabel, attributenVanaf);
		}

		//Test het toevoegen van een buitenlandse sleutel waarbij de naartabel null is
		@Test(expected=GeenTabelException.class)
		public void testToevoegenBuitenlandseSleutelError4() throws GeenDatabankConnectie, LijstenNietEvenLangException, TabelBestaatNietException, AttribuutBestaatNietException, SoortOnbekendException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttrBestaatInAttrGroepException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, NulOnbekendException, ReferentieBestaatException, GroepNaamException, GeenTabelException, GeenPrimaireSleutelException, GeenAttributenException, AttribuutGroepNaamBestaatInAttribuutGroepenException, DatabankNietVerbondenException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
			testToevoegenSucces11();

			String groepNaam = "bs_singlealbum";
			Tabel vanTabel = rdbms.getConnected().getTabel("Single");
			Tabel naarTabel = null;
			String[] attributenVanaf = new String[]{"Artiest"};

			rdbms.toevoegenBuitenlandseSleutel2(groepNaam, vanTabel, naarTabel, attributenVanaf);
		}
		
		//Test het toevoegen van een buitenlandse sleutel waarbij de attributenVanaf null is
		@Test(expected=GeenAttributenException.class)
		public void testToevoegenBuitenlandseSleutelError5() throws GeenDatabankConnectie, LijstenNietEvenLangException, TabelBestaatNietException, AttribuutBestaatNietException, SoortOnbekendException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttrBestaatInAttrGroepException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, NulOnbekendException, ReferentieBestaatException, GroepNaamException, GeenTabelException, GeenPrimaireSleutelException, GeenAttributenException, AttribuutGroepNaamBestaatInAttribuutGroepenException, DatabankNietVerbondenException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
			testToevoegenSucces11();

			String groepNaam = "bs_singlealbum";
			Tabel vanTabel = rdbms.getConnected().getTabel("Single");
			Tabel naarTabel = rdbms.getConnected().getTabel("Album");
			String[] attributenVanaf = null;

			rdbms.toevoegenBuitenlandseSleutel2(groepNaam, vanTabel, naarTabel, attributenVanaf);
		}
		
		//Test het toevoegen van een buitenlandse sleutel waarbij de attributenVanaf leeg is
		@Test(expected=GeenAttributenException.class)
		public void testToevoegenBuitenlandseSleutelError6() throws GeenDatabankConnectie, LijstenNietEvenLangException, TabelBestaatNietException, AttribuutBestaatNietException, SoortOnbekendException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttrBestaatInAttrGroepException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, NulOnbekendException, ReferentieBestaatException, GroepNaamException, GeenTabelException, GeenPrimaireSleutelException, GeenAttributenException, AttribuutGroepNaamBestaatInAttribuutGroepenException, DatabankNietVerbondenException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
			testToevoegenSucces11();

			String groepNaam = "bs_singlealbum";
			Tabel vanTabel = rdbms.getConnected().getTabel("Single");
			Tabel naarTabel = rdbms.getConnected().getTabel("Album");
			String[] attributenVanaf = new String[]{};

			rdbms.toevoegenBuitenlandseSleutel2(groepNaam, vanTabel, naarTabel, attributenVanaf);
		}
		
	//-----------------------------
	//--------VerwijderTabel-------
	//-----------------------------

	//Test het verwijderen van tabellen.
	@Test
	public void testVerwijderTabellenSucces1() throws GeenDatabankConnectie, LijstenNietEvenLangException, TabelBestaatNietException, AttribuutBestaatNietException, SoortOnbekendException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttrBestaatInAttrGroepException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, NulOnbekendException, ReferentieBestaatNietException, DatabankNietVerbondenException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException {
		testToevoegenSucces9();
		assertEquals(2, rdbms.getConnected().getTabellenSize());
		rdbms.verwijderTabel("Single");
		assertEquals(1, rdbms.getConnected().getTabellenSize());
	}

	//------------------------------
	//--------VerwijderRecord-------
	//------------------------------

	//Test het verwijderen van alle records als er maar 1 record is
	@Test
	public void testVerwijderRecordSucces1() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, LijstenNietEvenLangException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankNietVerbondenException, FilterIsLeegException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException, ReferentieBestaatNietException {
		testToevoegenSucces1();
		assertEquals(1, rdbms.getConnected().getTabel("Album").getRecords().size());

		rdbms.verwijderen("Album", null, null);
		assertEquals(0, rdbms.getConnected().getTabel("Album").getRecords().size());
	}

	//Test het verwijderen van alle records als er al veel records zijn
	@Test
	public void testVerwijderRecordSucces2() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, LijstenNietEvenLangException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankNietVerbondenException, FilterIsLeegException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException, ReferentieBestaatNietException {
		testToevoegenSucces9();
		assertEquals(8, rdbms.getConnected().getTabel("Album").getRecords().size());

		rdbms.verwijderen("Album", null, null);
		assertEquals(0, rdbms.getConnected().getTabel("Album").getRecords().size());
	}

	//Test het verwijderen 1 record gebruikmakend van het filter
	@Test
	public void testVerwijderRecordSucces3() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, LijstenNietEvenLangException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankNietVerbondenException, FilterIsLeegException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException, ReferentieBestaatNietException {
		testToevoegenSucces1();
		assertEquals(1, rdbms.getConnected().getTabel("Album").getRecords().size());

		rdbms.verwijderen("Album", "Naam", "Paul");
		assertEquals(0, rdbms.getConnected().getTabel("Album").getRecords().size());
	}

	//Test het verwijderen 1 record uit een lijst van veel records gebruikmakend van het filter
	@Test
	public void testVerwijderRecordSucces4() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, LijstenNietEvenLangException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankNietVerbondenException, FilterIsLeegException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException, ReferentieBestaatNietException {
		testToevoegenSucces9();
		assertEquals(8, rdbms.getConnected().getTabel("Album").getRecords().size());

		rdbms.verwijderen("Album", "Naam", "Paul");
		assertEquals(7, rdbms.getConnected().getTabel("Album").getRecords().size());
	}

	//Test het verwijderen meerdere maar niet alle records uit een lijst van veel records gebruikmakend van het filter
	@Test
	public void testVerwijderRecordSucces5() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, LijstenNietEvenLangException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankNietVerbondenException, FilterIsLeegException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException, ReferentieBestaatNietException {
		testToevoegenSucces9();
		assertEquals(8, rdbms.getConnected().getTabel("Album").getRecords().size());

		rdbms.verwijderen("Album", "ReleaseYear", "2012");
		assertEquals(5, rdbms.getConnected().getTabel("Album").getRecords().size());
	}

	//Test het verwijderen van een niet bestaand records uit een lijst van veel records gebruikmakend van het filter
	@Test
	public void testVerwijderRecordSucces6() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, LijstenNietEvenLangException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankNietVerbondenException, FilterIsLeegException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException, ReferentieBestaatNietException {
		testToevoegenSucces9();
		assertEquals(8, rdbms.getConnected().getTabel("Album").getRecords().size());

		rdbms.verwijderen("Album", "ReleaseYear", "1234567890");
		assertEquals(8, rdbms.getConnected().getTabel("Album").getRecords().size());
	}

	//Test het verwijderen van een record uit een tabel die niet bestaat
	@Test(expected=TabelBestaatNietException.class)
	public void testVerwijderRecordError1() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, LijstenNietEvenLangException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankNietVerbondenException, FilterIsLeegException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException, ReferentieBestaatNietException {
		testToevoegenSucces9();
		rdbms.verwijderen("Pannenkoek", null, null);
	}

	//Test het verwijderen van een record met een leeg filter, maar wel verwacht
	@Test(expected=FilterIsLeegException.class)
	public void testVerwijderRecordError2() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, LijstenNietEvenLangException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankNietVerbondenException, FilterIsLeegException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException, ReferentieBestaatNietException {
		testToevoegenSucces9();
		rdbms.verwijderen("Album", "ReleaseYear", null);
	}

	//Test het verwijderen van een record met een leeg filter, maar wel verwacht
	@Test(expected=FilterIsLeegException.class)
	public void testVerwijderRecordError3() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, LijstenNietEvenLangException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankNietVerbondenException, FilterIsLeegException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException, ReferentieBestaatNietException {
		testToevoegenSucces9();
		rdbms.verwijderen("Album", "ReleaseYear", "");
	}

	//Test het verwijderen van een record met een leeg filter, maar wel verwacht
	@Test(expected=AttribuutBestaatNietException.class)
	public void testVerwijderRecordError4() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, LijstenNietEvenLangException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankNietVerbondenException, FilterIsLeegException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException, ReferentieBestaatNietException {
		testToevoegenSucces9();
		rdbms.verwijderen("Album", "Pannenkoek", "Henk");
	}

	//---------------------------
	//--------UpdateRecord-------
	//---------------------------

	//Test het updaten van alle records als er maar 1 record is
	@Test
	public void testUpdateRecordSucces1() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, LijstenNietEvenLangException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankNietVerbondenException, FilterIsLeegException, GeenKolomNamenException, RecordWaardeNietGevondenException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException, ReferentieBestaatNietException {
		testToevoegenSucces1();

		ArrayList<String> kolomNamen = new ArrayList<String>();
		kolomNamen.add("*");
		assertEquals("ReleaseYear | Genre | Naam | \n2012 | Happy Hardcore | Paul | \n", rdbms.selecteren(kolomNamen, "Album", null, null));

		rdbms.update("Album", new String[]{"Naam", "Genre", "ReleaseYear"}, new String[]{"Paul", "Early Hardcore", "1990"}, null, null);
		assertEquals("ReleaseYear | Genre | Naam | \n1990 | Early Hardcore | Paul | \n", rdbms.selecteren(kolomNamen, "Album", null, null));
	}	

	//Test het updaten van 1 attribuut van alle records als er maar 1 record is
	@Test
	public void testUpdateRecordSucces2() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, LijstenNietEvenLangException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankNietVerbondenException, FilterIsLeegException, GeenKolomNamenException, RecordWaardeNietGevondenException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException, ReferentieBestaatNietException {
		testToevoegenSucces1();

		ArrayList<String> kolomNamen = new ArrayList<String>();
		kolomNamen.add("*");
		assertEquals("ReleaseYear | Genre | Naam | \n2012 | Happy Hardcore | Paul | \n", rdbms.selecteren(kolomNamen, "Album", null, null));

		rdbms.update("Album", new String[]{"Genre"}, new String[]{"Early Hardcore"}, null, null);
		assertEquals("ReleaseYear | Genre | Naam | \n2012 | Early Hardcore | Paul | \n", rdbms.selecteren(kolomNamen, "Album", null, null));
	}	

	//Test het updaten van 1 attribuut van alle records van veel records, mag ivm primairesleutel
	@Test
	public void testUpdateRecordSucces3() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, LijstenNietEvenLangException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankNietVerbondenException, FilterIsLeegException, GeenKolomNamenException, RecordWaardeNietGevondenException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException, ReferentieBestaatNietException {
		testToevoegenSucces9();

		ArrayList<String> kolomNamen = new ArrayList<String>();
		kolomNamen.add("*");
		assertEquals("ReleaseYear | Genre | Naam | \n2012 | Happy Hardcore | Paul | \n2013 | Pop | Ruud | \n1943 | Klassiek | Willem | \n1912 | Terror | Hermien | \n2012 | Progressive Metal | Nico | \n2012 | Hardstyle | Dennis | \n2015 | Polka | J-AGE | \n2015 | Hardstyle | Bram | \n", rdbms.selecteren(kolomNamen, "Album", null, null));

		rdbms.update("Album", new String[]{"Genre"}, new String[]{"Early Hardcore"}, null, null);
		assertEquals("ReleaseYear | Genre | Naam | \n2012 | Early Hardcore | Paul | \n2013 | Early Hardcore | Ruud | \n1943 | Early Hardcore | Willem | \n1912 | Early Hardcore | Hermien | \n2012 | Early Hardcore | Nico | \n2012 | Early Hardcore | Dennis | \n2015 | Early Hardcore | J-AGE | \n2015 | Early Hardcore | Bram | \n", rdbms.selecteren(kolomNamen, "Album", null, null));
	}	

	//Test het updaten van 1 attribuut van alle records van een deelverzameling van records, dmv filter, mag ivm primairesleutel
	@Test
	public void testUpdateRecordSucces4() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, LijstenNietEvenLangException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankNietVerbondenException, FilterIsLeegException, GeenKolomNamenException, RecordWaardeNietGevondenException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException, ReferentieBestaatNietException {
		testToevoegenSucces9();

		ArrayList<String> kolomNamen = new ArrayList<String>();
		kolomNamen.add("*");
		assertEquals("ReleaseYear | Genre | Naam | \n2012 | Happy Hardcore | Paul | \n2013 | Pop | Ruud | \n1943 | Klassiek | Willem | \n1912 | Terror | Hermien | \n2012 | Progressive Metal | Nico | \n2012 | Hardstyle | Dennis | \n2015 | Polka | J-AGE | \n2015 | Hardstyle | Bram | \n", rdbms.selecteren(kolomNamen, "Album", null, null));

		rdbms.update("Album", new String[]{"Genre"}, new String[]{"Early Hardcore"}, "ReleaseYear", "2012");
		assertEquals("ReleaseYear | Genre | Naam | \n2012 | Early Hardcore | Paul | \n2013 | Pop | Ruud | \n1943 | Klassiek | Willem | \n1912 | Terror | Hermien | \n2012 | Early Hardcore | Nico | \n2012 | Early Hardcore | Dennis | \n2015 | Polka | J-AGE | \n2015 | Hardstyle | Bram | \n", rdbms.selecteren(kolomNamen, "Album", null, null));
	}	


	//Test het updaten van alle records als er veel records zijn, mag niet door primairesleutel
	@Test(expected=PrimaireSleutelDuplicaatException.class)
	public void testUpdateRecordError1() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, LijstenNietEvenLangException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankNietVerbondenException, FilterIsLeegException, GeenKolomNamenException, RecordWaardeNietGevondenException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException, ReferentieBestaatNietException {
		testToevoegenSucces9();
		rdbms.update("Album", new String[]{"Naam", "Genre", "ReleaseYear"}, new String[]{"Paul", "Early Hardcore", "1990"}, null, null);
	}	

	//Test het updaten van alle records van een niet bestaande tabel
	@Test(expected=TabelBestaatNietException.class)
	public void testUpdateRecordError2() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, LijstenNietEvenLangException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankNietVerbondenException, FilterIsLeegException, GeenKolomNamenException, RecordWaardeNietGevondenException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException, ReferentieBestaatNietException {
		testToevoegenSucces9();
		rdbms.update(null, new String[]{"Naam", "Genre", "ReleaseYear"}, new String[]{"Paul", "Early Hardcore", "1990"}, null, null);
	}	

	//Test het updaten van alle records van een niet bestaande tabel
	@Test(expected=TabelBestaatNietException.class)
	public void testUpdateRecordError3() throws DatabankBestaatException, DatabankNaamException, DatabankBestaatNietException, AttribuutBestaatException, AttribuutBestaatNietException, AttrBestaatInAttrGroepException, GeenDatabankConnectie, TabelBestaatNietException, TabelBestaatException, TabelNaamException, AttribuutLijstLeegException, PrimaireSleutelLijstLeegException, PrimaireSleutelNaamException, SoortOnbekendException, NulOnbekendException, LijstenNietEvenLangException, SoortIncorrectException, RecordWaardeIsLeegException, RecordWaardeMagNietLeegZijn, PrimaireSleutelAttribuutNamenException, AttribuutNaamKomtNietVoorInPrimaireSleutelException, PrimaireSleutelDuplicaatException, DatabankNietVerbondenException, FilterIsLeegException, GeenKolomNamenException, RecordWaardeNietGevondenException, BuitenlandseSleutelVerwijstNaarNietBestaandRecordException, ReferentieBestaatNietException {
		testToevoegenSucces9();
		rdbms.update("Pannenkoek", new String[]{"Naam", "Genre", "ReleaseYear"}, new String[]{"Paul", "Early Hardcore", "1990"}, null, null);
	}	

	//-------------------------------------------------
	//--------BuitenlandseSleutelToevoegenRecord-------
	//-------------------------------------------------

	//Test het aanmaken van twee tabellen, met een foreign key,
	//waarbij een record wordt aangemaakt dat verwijst naar een record in de andere tabel
	@Test
	public void testBuitenlandseSleutelToevoegenRecordSucces1() throws Exception {
		//Create Databank
		rdbms.createDatabank("Saxion");

		//Connect Databank
		rdbms.connectDatabank("Saxion");

		//Create Tabel Docenten
		String tabelNaam = "Docenten";
		ArrayList<ArrayList<String>> attributen = new ArrayList<ArrayList<String>>();

		ArrayList<String> naamAttribuut = new ArrayList<String>();
		naamAttribuut.add("Docentnaam");
		naamAttribuut.add("VARCHAR");
		naamAttribuut.add("NOTNULL");
		attributen.add(naamAttribuut);

		ArrayList<String> adresAttribuut = new ArrayList<String>();
		adresAttribuut.add("Adres");
		adresAttribuut.add("VARCHAR");
		adresAttribuut.add("NULL");
		attributen.add(adresAttribuut);

		ArrayList<String> woonplaatsAttribuut = new ArrayList<String>();
		woonplaatsAttribuut.add("Woonplaats");
		woonplaatsAttribuut.add("VARCHAR");
		woonplaatsAttribuut.add("NULL");
		attributen.add(woonplaatsAttribuut);

		ArrayList<String> geboortedatumAttribuut = new ArrayList<String>();
		geboortedatumAttribuut.add("Geboortedatum");
		geboortedatumAttribuut.add("VARCHAR");
		geboortedatumAttribuut.add("NOTNULL");
		attributen.add(geboortedatumAttribuut);

		ArrayList<String> locatieAttribuut = new ArrayList<String>();
		locatieAttribuut.add("Locatie");
		locatieAttribuut.add("VARCHAR");
		locatieAttribuut.add("NULL");
		attributen.add(locatieAttribuut);

		ArrayList<String> primaireSleutel = new ArrayList<String>();
		primaireSleutel.add("Docentnaam");

		String primaireSleutelNaam = "p_docenten";

		rdbms.createTabel(tabelNaam, attributen, primaireSleutel, primaireSleutelNaam);

		//Create Tabel Vakken met foreign key naar Tabel Docenten
		tabelNaam = "Vakken";
		attributen = new ArrayList<ArrayList<String>>();

		naamAttribuut = new ArrayList<String>();
		naamAttribuut.add("Naam");
		naamAttribuut.add("VARCHAR");
		naamAttribuut.add("NOTNULL");
		attributen.add(naamAttribuut);

		ArrayList<String> docentAttribuut = new ArrayList<String>();
		docentAttribuut.add("Docentnaam");
		docentAttribuut.add("VARCHAR");
		docentAttribuut.add("NOTNULL");
		attributen.add(docentAttribuut);

		ArrayList<String> codeAttribuut = new ArrayList<String>();
		codeAttribuut.add("Code");
		codeAttribuut.add("VARCHAR");
		codeAttribuut.add("NOTNULL");
		attributen.add(codeAttribuut);

		ArrayList<String> kwartielAttribuut = new ArrayList<String>();
		kwartielAttribuut.add("Kwartiel");
		kwartielAttribuut.add("INT");
		kwartielAttribuut.add("NULL");
		attributen.add(kwartielAttribuut);

		ArrayList<String> studielastAttribuut = new ArrayList<String>();
		studielastAttribuut.add("Studielast");
		studielastAttribuut.add("INT");
		studielastAttribuut.add("NULL");
		attributen.add(studielastAttribuut);

		primaireSleutel = new ArrayList<String>();
		primaireSleutel.add("Code");

		primaireSleutelNaam = "p_vakken";
		String groepNaam = "bs_vakdocent";

		String[] attributenVanaf = new String[]{"Docentnaam"};

		rdbms.createTabel(tabelNaam, attributen, primaireSleutel, primaireSleutelNaam);
		Tabel tabelVakken = rdbms.getConnected().getTabel("Vakken");
		Tabel tabelDocenten = rdbms.getConnected().getTabel("Docenten");
		rdbms.toevoegenBuitenlandseSleutel2(groepNaam, tabelVakken, tabelDocenten, attributenVanaf);

		//Voeg Records toe aan Docenten
		tabelNaam = "Docenten";
		String[] namen = new String[] {
				"Docentnaam",
				"Adres",
				"Woonplaats",
				"Geboortedatum",
				"Locatie"
		};
		String[] waardes = new String[] {
				"Ruud Greven",
				"Van Galenstraat 19",
				"Enschede",
				"05-06-1983",
				"Enschede"
		};
		rdbms.toevoegen(tabelNaam, namen, waardes);
	
		//Voeg Records toe aan Vakken
		tabelNaam = "Vakken";
		namen = new String[] {
				"Naam",
				"Docentnaam",
				"Code",
				"Kwartiel",
				"Studielast"
		};
		waardes = new String[] {
				"DBI",
				"Ruud Greven",
				"DBI_I7",
				"4",
				"3"
		};
		rdbms.toevoegen(tabelNaam, namen, waardes);
	}

	//Test het aanmaken van twee tabellen, met een foreign key,
	//waarbij twee records worden aangemaakt die allebei verwijzen naar een eigen record in de andere tabel
	@Test
	public void testBuitenlandseSleutelToevoegenRecordSucces2() throws Exception {
		//Create Databank
		rdbms.createDatabank("Saxion");

		//Connect Databank
		rdbms.connectDatabank("Saxion");

		//Create Tabel Docenten
		String tabelNaam = "Docenten";
		ArrayList<ArrayList<String>> attributen = new ArrayList<ArrayList<String>>();

		ArrayList<String> naamAttribuut = new ArrayList<String>();
		naamAttribuut.add("Docentnaam");
		naamAttribuut.add("VARCHAR");
		naamAttribuut.add("NOTNULL");
		attributen.add(naamAttribuut);

		ArrayList<String> adresAttribuut = new ArrayList<String>();
		adresAttribuut.add("Adres");
		adresAttribuut.add("VARCHAR");
		adresAttribuut.add("NULL");
		attributen.add(adresAttribuut);

		ArrayList<String> woonplaatsAttribuut = new ArrayList<String>();
		woonplaatsAttribuut.add("Woonplaats");
		woonplaatsAttribuut.add("VARCHAR");
		woonplaatsAttribuut.add("NULL");
		attributen.add(woonplaatsAttribuut);

		ArrayList<String> geboortedatumAttribuut = new ArrayList<String>();
		geboortedatumAttribuut.add("Geboortedatum");
		geboortedatumAttribuut.add("VARCHAR");
		geboortedatumAttribuut.add("NOTNULL");
		attributen.add(geboortedatumAttribuut);

		ArrayList<String> locatieAttribuut = new ArrayList<String>();
		locatieAttribuut.add("Locatie");
		locatieAttribuut.add("VARCHAR");
		locatieAttribuut.add("NULL");
		attributen.add(locatieAttribuut);

		ArrayList<String> primaireSleutel = new ArrayList<String>();
		primaireSleutel.add("Docentnaam");

		String primaireSleutelNaam = "p_docenten";

		rdbms.createTabel(tabelNaam, attributen, primaireSleutel, primaireSleutelNaam);

		//Create Tabel Vakken met foreign key naar Tabel Docenten
		tabelNaam = "Vakken";
		attributen = new ArrayList<ArrayList<String>>();

		naamAttribuut = new ArrayList<String>();
		naamAttribuut.add("Naam");
		naamAttribuut.add("VARCHAR");
		naamAttribuut.add("NOTNULL");
		attributen.add(naamAttribuut);

		ArrayList<String> docentAttribuut = new ArrayList<String>();
		docentAttribuut.add("Docentnaam");
		docentAttribuut.add("VARCHAR");
		docentAttribuut.add("NOTNULL");
		attributen.add(docentAttribuut);

		ArrayList<String> codeAttribuut = new ArrayList<String>();
		codeAttribuut.add("Code");
		codeAttribuut.add("VARCHAR");
		codeAttribuut.add("NOTNULL");
		attributen.add(codeAttribuut);

		ArrayList<String> kwartielAttribuut = new ArrayList<String>();
		kwartielAttribuut.add("Kwartiel");
		kwartielAttribuut.add("INT");
		kwartielAttribuut.add("NULL");
		attributen.add(kwartielAttribuut);

		ArrayList<String> studielastAttribuut = new ArrayList<String>();
		studielastAttribuut.add("Studielast");
		studielastAttribuut.add("INT");
		studielastAttribuut.add("NULL");
		attributen.add(studielastAttribuut);

		primaireSleutel = new ArrayList<String>();
		primaireSleutel.add("Code");

		primaireSleutelNaam = "p_vakken";
		String groepNaam = "bs_vakdocent";

		String[] attributenVanaf = new String[]{"Docentnaam"};

		rdbms.createTabel(tabelNaam, attributen, primaireSleutel, primaireSleutelNaam);
		Tabel tabelVakken = rdbms.getConnected().getTabel("Vakken");
		Tabel tabelDocenten = rdbms.getConnected().getTabel("Docenten");
		rdbms.toevoegenBuitenlandseSleutel2(groepNaam, tabelVakken, tabelDocenten, attributenVanaf);

		//Voeg Records toe aan Docenten
		tabelNaam = "Docenten";
		String[] namen = new String[] {
				"Docentnaam",
				"Adres",
				"Woonplaats",
				"Geboortedatum",
				"Locatie"
		};
		String[] waardes = new String[] {
				"Ruud Greven",
				"Van Galenstraat 19",
				"Enschede",
				"05-06-1983",
				"Enschede"
		};
		rdbms.toevoegen(tabelNaam, namen, waardes);

		namen = new String[] {
				"Docentnaam",
				"Adres",
				"Woonplaats",
				"Geboortedatum",
				"Locatie"
		};
		waardes = new String[] {
				"Paul Goolkate",
				"Onder de Brug 1",
				"Hengelo",
				"02-04-1803",
				"Enschede"
		};
		rdbms.toevoegen(tabelNaam, namen, waardes);

		//Voeg Records toe aan Vakken
		tabelNaam = "Vakken";
		namen = new String[] {
				"Naam",
				"Docentnaam",
				"Code",
				"Kwartiel",
				"Studielast"
		};
		waardes = new String[] {
				"DBI",
				"Ruud Greven",
				"DBI_I7",
				"4",
				"3"
		};
		rdbms.toevoegen(tabelNaam, namen, waardes);

		tabelNaam = "Vakken";
		namen = new String[] {
				"Naam",
				"Docentnaam",
				"Code",
				"Kwartiel",
				"Studielast"
		};
		waardes = new String[] {
				"Game Design",
				"Paul Goolkate",
				"GP_I10_GD",
				"3",
				"3"
		};
		rdbms.toevoegen(tabelNaam, namen, waardes);
	}

	//Test het aanmaken van twee tabellen, met een foreign key,
	//waarbij twee records worden aangemaakt die allebei verwijzen naar hetzelfde record in de andere tabel
	@Test
	public void testBuitenlandseSleutelToevoegenRecordSucces3() throws Exception {
		//Create Databank
		rdbms.createDatabank("Saxion");

		//Connect Databank
		rdbms.connectDatabank("Saxion");

		//Create Tabel Docenten
		String tabelNaam = "Docenten";
		ArrayList<ArrayList<String>> attributen = new ArrayList<ArrayList<String>>();

		ArrayList<String> naamAttribuut = new ArrayList<String>();
		naamAttribuut.add("Docentnaam");
		naamAttribuut.add("VARCHAR");
		naamAttribuut.add("NOTNULL");
		attributen.add(naamAttribuut);

		ArrayList<String> adresAttribuut = new ArrayList<String>();
		adresAttribuut.add("Adres");
		adresAttribuut.add("VARCHAR");
		adresAttribuut.add("NULL");
		attributen.add(adresAttribuut);

		ArrayList<String> woonplaatsAttribuut = new ArrayList<String>();
		woonplaatsAttribuut.add("Woonplaats");
		woonplaatsAttribuut.add("VARCHAR");
		woonplaatsAttribuut.add("NULL");
		attributen.add(woonplaatsAttribuut);

		ArrayList<String> geboortedatumAttribuut = new ArrayList<String>();
		geboortedatumAttribuut.add("Geboortedatum");
		geboortedatumAttribuut.add("VARCHAR");
		geboortedatumAttribuut.add("NOTNULL");
		attributen.add(geboortedatumAttribuut);

		ArrayList<String> locatieAttribuut = new ArrayList<String>();
		locatieAttribuut.add("Locatie");
		locatieAttribuut.add("VARCHAR");
		locatieAttribuut.add("NULL");
		attributen.add(locatieAttribuut);

		ArrayList<String> primaireSleutel = new ArrayList<String>();
		primaireSleutel.add("Docentnaam");

		String primaireSleutelNaam = "p_docenten";

		rdbms.createTabel(tabelNaam, attributen, primaireSleutel, primaireSleutelNaam);

		//Create Tabel Vakken met foreign key naar Tabel Docenten
		tabelNaam = "Vakken";
		attributen = new ArrayList<ArrayList<String>>();

		naamAttribuut = new ArrayList<String>();
		naamAttribuut.add("Naam");
		naamAttribuut.add("VARCHAR");
		naamAttribuut.add("NOTNULL");
		attributen.add(naamAttribuut);

		ArrayList<String> docentAttribuut = new ArrayList<String>();
		docentAttribuut.add("Docentnaam");
		docentAttribuut.add("VARCHAR");
		docentAttribuut.add("NOTNULL");
		attributen.add(docentAttribuut);

		ArrayList<String> codeAttribuut = new ArrayList<String>();
		codeAttribuut.add("Code");
		codeAttribuut.add("VARCHAR");
		codeAttribuut.add("NOTNULL");
		attributen.add(codeAttribuut);

		ArrayList<String> kwartielAttribuut = new ArrayList<String>();
		kwartielAttribuut.add("Kwartiel");
		kwartielAttribuut.add("INT");
		kwartielAttribuut.add("NULL");
		attributen.add(kwartielAttribuut);

		ArrayList<String> studielastAttribuut = new ArrayList<String>();
		studielastAttribuut.add("Studielast");
		studielastAttribuut.add("INT");
		studielastAttribuut.add("NULL");
		attributen.add(studielastAttribuut);

		primaireSleutel = new ArrayList<String>();
		primaireSleutel.add("Code");

		primaireSleutelNaam = "p_vakken";
		String groepNaam = "bs_vakdocent";

		String[] attributenVanaf = new String[]{"Docentnaam"};

		rdbms.createTabel(tabelNaam, attributen, primaireSleutel, primaireSleutelNaam);
		Tabel tabelVakken = rdbms.getConnected().getTabel("Vakken");
		Tabel tabelDocenten = rdbms.getConnected().getTabel("Docenten");
		rdbms.toevoegenBuitenlandseSleutel2(groepNaam, tabelVakken, tabelDocenten, attributenVanaf);

		//Voeg Records toe aan Docenten
		tabelNaam = "Docenten";
		String[] namen = new String[] {
				"Docentnaam",
				"Adres",
				"Woonplaats",
				"Geboortedatum",
				"Locatie"
		};
		String[] waardes = new String[] {
				"Ruud Greven",
				"Van Galenstraat 19",
				"Enschede",
				"05-06-1983",
				"Enschede"
		};
		rdbms.toevoegen(tabelNaam, namen, waardes);

		//Voeg Records toe aan Vakken
		tabelNaam = "Vakken";
		namen = new String[] {
				"Naam",
				"Docentnaam",
				"Code",
				"Kwartiel",
				"Studielast"
		};
		waardes = new String[] {
				"DBI",
				"Ruud Greven",
				"DBI_I7",
				"4",
				"3"
		};
		rdbms.toevoegen(tabelNaam, namen, waardes);

		tabelNaam = "Vakken";
		namen = new String[] {
				"Naam",
				"Docentnaam",
				"Code",
				"Kwartiel",
				"Studielast"
		};
		waardes = new String[] {
				"Game Design",
				"Ruud Greven",
				"GP_I10_GD",
				"3",
				"3"
		};
		rdbms.toevoegen(tabelNaam, namen, waardes);
	}

	//Test het aanmaken van twee tabellen, met een foreign key,
	//waarbij een record wordt aangemaakt dat verwijst naar een niet bestaand record in de andere tabel
	@Test(expected=BuitenlandseSleutelVerwijstNaarNietBestaandRecordException.class)
	public void testBuitenlandseSleutelToevoegenRecordError1() throws Exception {
		//Create Databank
		rdbms.createDatabank("Saxion");

		//Connect Databank
		rdbms.connectDatabank("Saxion");

		//Create Tabel Docenten
		String tabelNaam = "Docenten";
		ArrayList<ArrayList<String>> attributen = new ArrayList<ArrayList<String>>();

		ArrayList<String> naamAttribuut = new ArrayList<String>();
		naamAttribuut.add("Docentnaam");
		naamAttribuut.add("VARCHAR");
		naamAttribuut.add("NOTNULL");
		attributen.add(naamAttribuut);

		ArrayList<String> adresAttribuut = new ArrayList<String>();
		adresAttribuut.add("Adres");
		adresAttribuut.add("VARCHAR");
		adresAttribuut.add("NULL");
		attributen.add(adresAttribuut);

		ArrayList<String> woonplaatsAttribuut = new ArrayList<String>();
		woonplaatsAttribuut.add("Woonplaats");
		woonplaatsAttribuut.add("VARCHAR");
		woonplaatsAttribuut.add("NULL");
		attributen.add(woonplaatsAttribuut);

		ArrayList<String> geboortedatumAttribuut = new ArrayList<String>();
		geboortedatumAttribuut.add("Geboortedatum");
		geboortedatumAttribuut.add("VARCHAR");
		geboortedatumAttribuut.add("NOTNULL");
		attributen.add(geboortedatumAttribuut);

		ArrayList<String> locatieAttribuut = new ArrayList<String>();
		locatieAttribuut.add("Locatie");
		locatieAttribuut.add("VARCHAR");
		locatieAttribuut.add("NULL");
		attributen.add(locatieAttribuut);

		ArrayList<String> primaireSleutel = new ArrayList<String>();
		primaireSleutel.add("Docentnaam");

		String primaireSleutelNaam = "p_docenten";

		rdbms.createTabel(tabelNaam, attributen, primaireSleutel, primaireSleutelNaam);

		//Create Tabel Vakken met foreign key naar Tabel Docenten
		tabelNaam = "Vakken";
		attributen = new ArrayList<ArrayList<String>>();

		naamAttribuut = new ArrayList<String>();
		naamAttribuut.add("Naam");
		naamAttribuut.add("VARCHAR");
		naamAttribuut.add("NOTNULL");
		attributen.add(naamAttribuut);

		ArrayList<String> docentAttribuut = new ArrayList<String>();
		docentAttribuut.add("Docentnaam");
		docentAttribuut.add("VARCHAR");
		docentAttribuut.add("NOTNULL");
		attributen.add(docentAttribuut);

		ArrayList<String> codeAttribuut = new ArrayList<String>();
		codeAttribuut.add("Code");
		codeAttribuut.add("VARCHAR");
		codeAttribuut.add("NOTNULL");
		attributen.add(codeAttribuut);

		ArrayList<String> kwartielAttribuut = new ArrayList<String>();
		kwartielAttribuut.add("Kwartiel");
		kwartielAttribuut.add("INT");
		kwartielAttribuut.add("NULL");
		attributen.add(kwartielAttribuut);

		ArrayList<String> studielastAttribuut = new ArrayList<String>();
		studielastAttribuut.add("Studielast");
		studielastAttribuut.add("INT");
		studielastAttribuut.add("NULL");
		attributen.add(studielastAttribuut);

		primaireSleutel = new ArrayList<String>();
		primaireSleutel.add("Code");

		primaireSleutelNaam = "p_vakken";
		String groepNaam = "bs_vakdocent";

		String[] attributenVanaf = new String[]{"Docentnaam"};

		rdbms.createTabel(tabelNaam, attributen, primaireSleutel, primaireSleutelNaam);
		Tabel tabelVakken = rdbms.getConnected().getTabel("Vakken");
		Tabel tabelDocenten = rdbms.getConnected().getTabel("Docenten");
		rdbms.toevoegenBuitenlandseSleutel2(groepNaam, tabelVakken, tabelDocenten, attributenVanaf);

		//Voeg Records toe aan Vakken
		tabelNaam = "Vakken";
		String[] namen = new String[] {
				"Naam",
				"Docentnaam",
				"Code",
				"Kwartiel",
				"Studielast"
		};
		String[] waardes = new String[] {
				"DBI",
				"Ruud Greven",
				"DBI_I7",
				"4",
				"3"
		};
		rdbms.toevoegen(tabelNaam, namen, waardes);
	}

	//Test het aanmaken van twee tabellen, met een foreign key,
	//waarbij een record wordt aangemaakt dat verwijst naar een niet bestaand record in de andere tabel
	@Test(expected=BuitenlandseSleutelVerwijstNaarNietBestaandRecordException.class)
	public void testBuitenlandseSleutelToevoegenRecordError2() throws Exception {
		//Create Databank
		rdbms.createDatabank("Saxion");

		//Connect Databank
		rdbms.connectDatabank("Saxion");

		//Create Tabel Docenten
		String tabelNaam = "Docenten";
		ArrayList<ArrayList<String>> attributen = new ArrayList<ArrayList<String>>();

		ArrayList<String> naamAttribuut = new ArrayList<String>();
		naamAttribuut.add("Docentnaam");
		naamAttribuut.add("VARCHAR");
		naamAttribuut.add("NOTNULL");
		attributen.add(naamAttribuut);

		ArrayList<String> adresAttribuut = new ArrayList<String>();
		adresAttribuut.add("Adres");
		adresAttribuut.add("VARCHAR");
		adresAttribuut.add("NULL");
		attributen.add(adresAttribuut);

		ArrayList<String> woonplaatsAttribuut = new ArrayList<String>();
		woonplaatsAttribuut.add("Woonplaats");
		woonplaatsAttribuut.add("VARCHAR");
		woonplaatsAttribuut.add("NULL");
		attributen.add(woonplaatsAttribuut);

		ArrayList<String> geboortedatumAttribuut = new ArrayList<String>();
		geboortedatumAttribuut.add("Geboortedatum");
		geboortedatumAttribuut.add("VARCHAR");
		geboortedatumAttribuut.add("NOTNULL");
		attributen.add(geboortedatumAttribuut);

		ArrayList<String> locatieAttribuut = new ArrayList<String>();
		locatieAttribuut.add("Locatie");
		locatieAttribuut.add("VARCHAR");
		locatieAttribuut.add("NULL");
		attributen.add(locatieAttribuut);

		ArrayList<String> primaireSleutel = new ArrayList<String>();
		primaireSleutel.add("Docentnaam");

		String primaireSleutelNaam = "p_docenten";

		rdbms.createTabel(tabelNaam, attributen, primaireSleutel, primaireSleutelNaam);

		//Create Tabel Vakken met foreign key naar Tabel Docenten
		tabelNaam = "Vakken";
		attributen = new ArrayList<ArrayList<String>>();

		naamAttribuut = new ArrayList<String>();
		naamAttribuut.add("Naam");
		naamAttribuut.add("VARCHAR");
		naamAttribuut.add("NOTNULL");
		attributen.add(naamAttribuut);

		ArrayList<String> docentAttribuut = new ArrayList<String>();
		docentAttribuut.add("Docentnaam");
		docentAttribuut.add("VARCHAR");
		docentAttribuut.add("NOTNULL");
		attributen.add(docentAttribuut);

		ArrayList<String> codeAttribuut = new ArrayList<String>();
		codeAttribuut.add("Code");
		codeAttribuut.add("VARCHAR");
		codeAttribuut.add("NOTNULL");
		attributen.add(codeAttribuut);

		ArrayList<String> kwartielAttribuut = new ArrayList<String>();
		kwartielAttribuut.add("Kwartiel");
		kwartielAttribuut.add("INT");
		kwartielAttribuut.add("NULL");
		attributen.add(kwartielAttribuut);

		ArrayList<String> studielastAttribuut = new ArrayList<String>();
		studielastAttribuut.add("Studielast");
		studielastAttribuut.add("INT");
		studielastAttribuut.add("NULL");
		attributen.add(studielastAttribuut);

		primaireSleutel = new ArrayList<String>();
		primaireSleutel.add("Code");

		primaireSleutelNaam = "p_vakken";
		String groepNaam = "bs_vakdocent";

		String[] attributenVanaf = new String[]{"Docentnaam"};

		rdbms.createTabel(tabelNaam, attributen, primaireSleutel, primaireSleutelNaam);
		Tabel tabelVakken = rdbms.getConnected().getTabel("Vakken");
		Tabel tabelDocenten = rdbms.getConnected().getTabel("Docenten");
		rdbms.toevoegenBuitenlandseSleutel2(groepNaam, tabelVakken, tabelDocenten, attributenVanaf);

		//Voeg Records toe aan Docenten
		tabelNaam = "Docenten";
		String[] namen = new String[] {
				"Docentnaam",
				"Adres",
				"Woonplaats",
				"Geboortedatum",
				"Locatie"
		};
		String[] waardes = new String[] {
				"Ruud Greven",
				"Van Galenstraat 19",
				"Enschede",
				"05-06-1983",
				"Enschede"
		};
		rdbms.toevoegen(tabelNaam, namen, waardes);

		//Voeg Records toe aan Vakken
		tabelNaam = "Vakken";
		namen = new String[] {
				"Naam",
				"Docentnaam",
				"Code",
				"Kwartiel",
				"Studielast"
		};
		waardes = new String[] {
				"Game Design",
				"Paul Goolkate",
				"GP_I10_GD",
				"3",
				"3"
		};
		rdbms.toevoegen(tabelNaam, namen, waardes);
	}
	
	//-------------------------------------------------
	//--------BuitenlandseSleutelVerwijderRecord-------
	//-------------------------------------------------
	
	@Test
	public void testBuitenlandseSleutelVerwijderRecordSucces1() throws Exception {
		testBuitenlandseSleutelToevoegenRecordSucces1();
		
		ArrayList<String> kolomNamen = new ArrayList<String>();
		kolomNamen.add("*");
		String tabelNaam = "Docenten";
		String filterKey = "";
		String filterValue = "";
		assertEquals("Geboortedatum | Docentnaam | Locatie | Adres | Woonplaats | \n05-06-1983 | Ruud Greven | Enschede | Van Galenstraat 19 | Enschede | \n", rdbms.selecteren(kolomNamen, tabelNaam, filterKey, filterValue));
		
		tabelNaam = "Vakken";
		assertEquals("Docentnaam | Studielast | Kwartiel | Naam | Code | \nRuud Greven | 3 | 4 | DBI | DBI_I7 | \n", rdbms.selecteren(kolomNamen, tabelNaam, filterKey, filterValue));
		
		tabelNaam = "Vakken";
		filterKey = "Docentnaam";
		filterValue = "Ruud Greven";
		
		rdbms.verwijderen(tabelNaam, filterKey, filterValue);
		
		tabelNaam = "Docenten";
		filterKey = "Docentnaam";
		filterValue = "Ruud Greven";
		
		rdbms.verwijderen(tabelNaam, filterKey, filterValue);
		
		tabelNaam = "Docenten";
		filterKey = "";
		filterValue = "";
		assertEquals("Geboortedatum | Docentnaam | Locatie | Adres | Woonplaats | \n", rdbms.selecteren(kolomNamen, tabelNaam, filterKey, filterValue));
		
		tabelNaam = "Vakken";
		assertEquals("Docentnaam | Studielast | Kwartiel | Naam | Code | \n", rdbms.selecteren(kolomNamen, tabelNaam, filterKey, filterValue));
	}
	
	@Test
	public void testBuitenlandseSleutelVerwijderRecordSucces2() throws Exception {
		testBuitenlandseSleutelToevoegenRecordSucces2();
		
		ArrayList<String> kolomNamen = new ArrayList<String>();
		kolomNamen.add("*");
		String tabelNaam = "Docenten";
		String filterKey = "";
		String filterValue = "";
		assertEquals("Geboortedatum | Docentnaam | Locatie | Adres | Woonplaats | \n05-06-1983 | Ruud Greven | Enschede | Van Galenstraat 19 | Enschede | \n02-04-1803 | Paul Goolkate | Enschede | Onder de Brug 1 | Hengelo | \n", rdbms.selecteren(kolomNamen, tabelNaam, filterKey, filterValue));
		
		tabelNaam = "Vakken";
		assertEquals("Docentnaam | Studielast | Kwartiel | Naam | Code | \nRuud Greven | 3 | 4 | DBI | DBI_I7 | \nPaul Goolkate | 3 | 3 | Game Design | GP_I10_GD | \n", rdbms.selecteren(kolomNamen, tabelNaam, filterKey, filterValue));
		
		tabelNaam = "Vakken";
		filterKey = "Docentnaam";
		filterValue = "Ruud Greven";
		
		rdbms.verwijderen(tabelNaam, filterKey, filterValue);
		
		tabelNaam = "Docenten";
		filterKey = "Docentnaam";
		filterValue = "Ruud Greven";
		
		rdbms.verwijderen(tabelNaam, filterKey, filterValue);
		
		tabelNaam = "Docenten";
		filterKey = "";
		filterValue = "";
		assertEquals("Geboortedatum | Docentnaam | Locatie | Adres | Woonplaats | \n02-04-1803 | Paul Goolkate | Enschede | Onder de Brug 1 | Hengelo | \n", rdbms.selecteren(kolomNamen, tabelNaam, filterKey, filterValue));
		
		tabelNaam = "Vakken";
		assertEquals("Docentnaam | Studielast | Kwartiel | Naam | Code | \nPaul Goolkate | 3 | 3 | Game Design | GP_I10_GD | \n", rdbms.selecteren(kolomNamen, tabelNaam, filterKey, filterValue));
	}
	
	@Test(expected=BuitenlandseSleutelVerwijstNaarNietBestaandRecordException.class)
	public void testBuitenlandseSleutelVerwijderRecordError1() throws Exception {
		testBuitenlandseSleutelToevoegenRecordSucces2();
		
		ArrayList<String> kolomNamen = new ArrayList<String>();
		kolomNamen.add("*");
		String tabelNaam = "Docenten";
		String filterKey = "";
		String filterValue = "";
		assertEquals("Geboortedatum | Docentnaam | Locatie | Adres | Woonplaats | \n05-06-1983 | Ruud Greven | Enschede | Van Galenstraat 19 | Enschede | \n02-04-1803 | Paul Goolkate | Enschede | Onder de Brug 1 | Hengelo | \n", rdbms.selecteren(kolomNamen, tabelNaam, filterKey, filterValue));
		
		tabelNaam = "Vakken";
		assertEquals("Docentnaam | Studielast | Kwartiel | Naam | Code | \nRuud Greven | 3 | 4 | DBI | DBI_I7 | \nPaul Goolkate | 3 | 3 | Game Design | GP_I10_GD | \n", rdbms.selecteren(kolomNamen, tabelNaam, filterKey, filterValue));
		
		tabelNaam = "Docenten";
		filterKey = "Docentnaam";
		filterValue = "Ruud Greven";
		
		rdbms.verwijderen(tabelNaam, filterKey, filterValue);
	}
	
	//-------------------------------------------------
	//--------BuitenlandseSleutelUpdateRecord-------
	//-------------------------------------------------
	
	@Test
	public void testBuitenlandseSleutelUpdateRecordSucces1() throws Exception {
		testBuitenlandseSleutelToevoegenRecordSucces2();
		
		String tabelNaam = "Vakken";
		String filterKey = "Docentnaam";
		String filterValue = "Paul Goolkate";
		
		rdbms.verwijderen(tabelNaam, filterKey, filterValue);
		
		ArrayList<String> kolomNamen = new ArrayList<String>();
		kolomNamen.add("*");
		tabelNaam = "Docenten";
		filterKey = "";
		filterValue = "";
		assertEquals("Geboortedatum | Docentnaam | Locatie | Adres | Woonplaats | \n05-06-1983 | Ruud Greven | Enschede | Van Galenstraat 19 | Enschede | \n02-04-1803 | Paul Goolkate | Enschede | Onder de Brug 1 | Hengelo | \n", rdbms.selecteren(kolomNamen, tabelNaam, filterKey, filterValue));
		
		tabelNaam = "Vakken";
		assertEquals("Docentnaam | Studielast | Kwartiel | Naam | Code | \nRuud Greven | 3 | 4 | DBI | DBI_I7 | \n", rdbms.selecteren(kolomNamen, tabelNaam, filterKey, filterValue));
		
		tabelNaam = "Vakken";
		String[] namen = new String[]{"Docentnaam"};
		String[] waardes = new String[]{"Paul Goolkate"};
		filterKey = "Docentnaam";
		filterValue = "Ruud Greven";
		
		rdbms.update(tabelNaam, namen, waardes, filterKey, filterValue);
		
		tabelNaam = "Vakken";
		filterKey = "";
		filterValue = "";
		assertEquals("Docentnaam | Studielast | Kwartiel | Naam | Code | \nPaul Goolkate | 3 | 4 | DBI | DBI_I7 | \n", rdbms.selecteren(kolomNamen, tabelNaam, filterKey, filterValue));
	}
	
	@Test
	public void testBuitenlandseSleutelUpdateRecordSucces2() throws Exception {
		testBuitenlandseSleutelToevoegenRecordSucces2();
		
		ArrayList<String> kolomNamen = new ArrayList<String>();
		kolomNamen.add("*");
		String tabelNaam = "Docenten";
		String filterKey = "";
		String filterValue = "";
		assertEquals("Geboortedatum | Docentnaam | Locatie | Adres | Woonplaats | \n05-06-1983 | Ruud Greven | Enschede | Van Galenstraat 19 | Enschede | \n02-04-1803 | Paul Goolkate | Enschede | Onder de Brug 1 | Hengelo | \n", rdbms.selecteren(kolomNamen, tabelNaam, filterKey, filterValue));
		
		tabelNaam = "Vakken";
		assertEquals("Docentnaam | Studielast | Kwartiel | Naam | Code | \nRuud Greven | 3 | 4 | DBI | DBI_I7 | \nPaul Goolkate | 3 | 3 | Game Design | GP_I10_GD | \n", rdbms.selecteren(kolomNamen, tabelNaam, filterKey, filterValue));
		
		tabelNaam = "Vakken";
		String[] namen = new String[]{"Docentnaam"};
		String[] waardes = new String[]{"Paul Goolkate"};
		filterKey = "Docentnaam";
		filterValue = "Ruud Greven";
		
		rdbms.update(tabelNaam, namen, waardes, filterKey, filterValue);
		
		tabelNaam = "Vakken";
		filterKey = "";
		filterValue = "";
		assertEquals("Docentnaam | Studielast | Kwartiel | Naam | Code | \nPaul Goolkate | 3 | 4 | DBI | DBI_I7 | \nPaul Goolkate | 3 | 3 | Game Design | GP_I10_GD | \n", rdbms.selecteren(kolomNamen, tabelNaam, filterKey, filterValue));
	}
	
	@Test(expected=BuitenlandseSleutelVerwijstNaarNietBestaandRecordException.class)
	public void testBuitenlandseSleutelUpdateRecordError1() throws Exception {
		testBuitenlandseSleutelToevoegenRecordSucces1();
		
		ArrayList<String> kolomNamen = new ArrayList<String>();
		kolomNamen.add("*");
		String tabelNaam = "Docenten";
		String filterKey = "";
		String filterValue = "";
		assertEquals("Geboortedatum | Docentnaam | Locatie | Adres | Woonplaats | \n05-06-1983 | Ruud Greven | Enschede | Van Galenstraat 19 | Enschede | \n", rdbms.selecteren(kolomNamen, tabelNaam, filterKey, filterValue));
		
		tabelNaam = "Vakken";
		assertEquals("Docentnaam | Studielast | Kwartiel | Naam | Code | \nRuud Greven | 3 | 4 | DBI | DBI_I7 | \n", rdbms.selecteren(kolomNamen, tabelNaam, filterKey, filterValue));
		
		tabelNaam = "Vakken";
		String[] namen = new String[]{"Docentnaam"};
		String[] waardes = new String[]{"Paul Goolkate"};
		filterKey = "Docentnaam";
		filterValue = "Ruud Greven";
		
		rdbms.update(tabelNaam, namen, waardes, filterKey, filterValue);
		
		kolomNamen.add("*");
		tabelNaam = "Docenten";
		filterKey = "";
		filterValue = "";
		System.out.println(rdbms.selecteren(kolomNamen, tabelNaam, filterKey, filterValue));
		
		tabelNaam = "Vakken";
		System.out.println(rdbms.selecteren(kolomNamen, tabelNaam, filterKey, filterValue));	
	}
	
	@Test(expected=BuitenlandseSleutelVerwijstNaarNietBestaandRecordException.class)
	public void testBuitenlandseSleutelUpdateRecordError2() throws Exception {
		testBuitenlandseSleutelUpdateRecordSucces2();
		
		String tabelNaam = "Docenten";
		String[] namen = new String[]{"Docentnaam"};
		String[] waardes = new String[]{"Willem Prakken"};
		String filterKey = "Docentnaam";
		String filterValue = "Paul Goolkate";
		
		rdbms.update(tabelNaam, namen, waardes, filterKey, filterValue);
	}
}
